- N +

网络请求OkHttp的使用

网络请求OkHttp的使用原标题:网络请求OkHttp的使用

导读:

okHttp:1.okHttp是squere公司出的,在Android4.0以后盛行2.httpClient 在5.0中弃用,在6.0以Google的sdk中没有该api3.h...

文章目录 [+]

okHttp:

1.okHttp是squere公司出的,在Android4.0以后盛行

2.httpClient 在5.0中弃用,在6.0以Google的sdk中没有该api

3.httpUrlConnection 系统自带的,用的比较频繁

特点:连接效率高,可以异步和同步

需要导入两个jar包:

okhttp-3.0.0-RC1.jar  okio-1.6.0.jar(okhttp内部依赖okio)

package fanggao.qf.okhttptest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.io.IOException;import java.io.InputStream;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import okhttp3.ResponseBody;public class MainActivity extends AppCompatActivity {    private TextView textview;    private static final String url = "http://m2.qiushibaike.com/article/list/text?page=1";
    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.btn_download);
        textview = (TextView) findViewById(R.id.tv_text);
    }    /**
     * 点击下载数据
     * @param view     */
    public void onClick(View view){        //同步的方式,需要在子线程中运行,否则报错
   /*     new Thread(new Runnable() {
            @Override
            public void run() {
                getDataForGet();
            }
        }).start();*/
        //异步  ,不需要开启子线程         getAsyncOkHttp();
    }    /**
     * 异步:同时执行多个
     * 通过get请求获取数据
     *     */
    private void getAsyncOkHttp() {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().get().url(url).build();        //异步:
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override            public void onFailure(Request request, IOException e) {
            }
            @Override            public void onResponse(Response response) throws IOException {                final String string = response.body().String();
                Log.i("tag","------"+Thread.currentThread().getId());                //只能在主线程中进行UI操作                //在主线程中进行
                runOnUiThread(new Runnable() {
                    @Override                    public void run() {
                        textview.setText(string);
                    }
                });
            }
        });
    }    /**
     * 同步:一次执行一个
     * 通过get请求获取数据     */
    private void getDataForGet() {        try {        //1.声明okhttp客户端
        OkHttpClient okHttpClient = new OkHttpClient();        //2.构造request            //1.声明构造器 ,设置请求方式,设置请求参数
        Request request = new Request.Builder().get().url(url).build();        //3.通过客户端执行请求,获得response
            Response response = okHttpClient.newCall(request).execute();            //4,判断响应是否成功
            if(response.isSuccessful()){                //获得响应实体
                ResponseBody body = response.body();                //获得string
               final  String string = body.string();                //获得bytep[]
                byte[] bytes = body.bytes();                //获得流
                InputStream inputStream = body.byteStream();                //在主线程中进行
                runOnUiThread(new Runnable() {
                    @Override                    public void run() {
                        textview.setText(string);
                    }
                });
            }
            Log.i("tag",Thread.currentThread().getName());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

现象:
 网络请求OkHttp的使用 文档资料


本文标题:网络请求OkHttp的使用
本文链接:http://kyjszj.com/wdzl/177.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共660人参与)参与讨论

    还没有评论,来说两句吧...