okhttp使用入门

获取client

在okhttp官方说明中建议只使用一个全局OkHttpClient对象。所以我们这样创建一个OkHttpClient对象:

final static OkHttpClient client = new OkHttpClient();

这个okhttp client会获取你的请求,发送它给服务器,然后返回服务器的响应给你。

创建缓存

使用缓存是可选的,但如果你想让你的app网络连接更快(同时也会减少带宽的使用)是非常需要它的。这个小的额外的代码是非常值得的。
下面是我们如何创建缓存:

File cacheDirectory = new File(this.getCacheDir(),"http");
int cacheSize = 10*1024*1024;
try{
    Cache cache = new Cache(cacheDirectory,cacheSize);
    client.setCache(cache);
    }catch(IOException e){
     e.printStackTrace()
     }

我们创建一个缓存目录cacheDirectory通过创建一个新的文件对象。我们传进文件对象两个参数:

  • getCacheDir返回我们的缓冲目录

  • 缓存文件的名字

构建请求(request)

使用okhttp的Request.Builder 类创建你的http请求:

Request request = new Request.Builder().url(fileUrl).build();

我们建立了一个简单的http请求,像url()传入一个我们想下载文件的url地址。
调用build() 方法创建请求。
一旦你创建好请求,你可以调用execute()方法立刻执行。它会在主线程运行,所以你最好在多线程中使用。

异步(Queue)请求

我们想要在一个工作线程执行http请求,可以使用OkHttp的Call 类的enqueue() 方法:

Client.newCall(request).enqueue(new Callback(){
    @Override 
    public void onFailure(Request request,IOException e){....}
    @Override 
    public void onResponse(Request request) throws IOException{....}
});

enqueue() 将请求放入任务计划表并在未来的某时执行。通常它会立马运行除非在队列(queue)里有其它请求。
有两个需要的方法,其中一个是回调后执行:

  • onFailure(),请求执行时失败,由于连接问题、超时或取消。

  • onResponse(),http请求成功检索和服务器返回一个响应。注意的是即使收到响应,也不意味着你的请求就成功了,举个例子,有时服务器可能会返回404响应代码,你必须处理它当提取来自响应的信息。

请求失败时会发生什么?

onFailure() 在连接出问题时被调用
记住请求和回复都是在工作线程中执行的。所以你不能用结果直接更新主线程UI。
我们使用runable 更新ImageView去显示失败的图片。我们也设置isRequestProblem 布尔值为真(我们将会在Activity的生命周期方法中用到它,onResume(),来展示正确的图片当设备的方向改变)。

请求成功时会发生什么

收到响应并不意味着请求成功。它只意味着服务器接收到你的请求然后发出响应。是你来决定响应是否成功。我们使用Response 类的isSuccessful()方法来评估响应是否成功。如果不成功然后我们抛出一个异常。
如果我们获得响应代码是200(这是下载成功常数),然后我们会从响应体中取得一个输入流。这里举个常见情景,假设此时我们请求是下载一张图片,我们的情况可以是这样:使用BitmapFactory类的decodeStream() 方法来把图片转换为bitmap.这个bitmap后面会传进我们的updateImage()方法:

if(response.code()==SUCCESSFUL_DOWNLOAD){
    isRequestProblem = false;
    isResponseProblem = false;
    ResponseBody in = response.body();
    InputStream inputStream = in.byteStream();
    updateImage(BitmapFactory.decodeStream(inputStream));
}

ps:可以上网了解下所有可能的响应状态码。
如果状态码不是200,我们用一个runnable 来展示错失的图片。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值