- 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://www.kyjszj.com/wdzl/177.html
作者授权:除特别说明外,本文由?开源技术之家?原创编译并授权?开源技术之家?刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

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

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

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

快捷回复:

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

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