热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Android更好的扩展性更强网络请求框架----okhttp

大家刚开始写项目时,大多数会选择比较成熟的第三方请求框架。比如Xutils等,更有心者会选择Volley。我个人感觉这是值得肯定的。这两个框架我都在项目中实践过,各有千

             大家刚开始写项目时,大多数会选择比较成熟的第三方请求框架。比如Xutils等,更有心者会选择Volley。我个人感觉这是值得肯定的。这两个框架我都在项目中实践过,各有千秋。在我之前的文章中我已经将他们在网络方面的使用,性能做了比较,大家可以看一下。说实话写的不怎么地偷笑 .build();
client.newCall(request).enqueue(new Callback()
{

@Override
public void onResponse(Response arg0)
throws IOException
{
if (arg0.isSuccessful())
{
Log.i("获取网络返回数据操作值", "" + arg0.code());
Log.i("获取网络返回数据", arg0.body().string());
}

}

@Override
public void onFailure(Request arg0, IOException arg1)
{
// TODO Auto-generated method stub

}
});

}         在post传入参数时如下,可以看出来,传入header或者post参数都是传到Request里面,因此最后的调用方式也和GET方式样

         POST:(异步)


RequestBody formBody = new FormEncodingBuilder()
.add("platform", "android")
.add("name", "bug")
.add("subject", "XXXXXXXXXXXXXXX")
.build();

Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();

Response response = client.newCall(request).enqueue(new Callback()
{
@Override
public void onResponse(Response arg0)
throws IOException
{
if (arg0.isSuccessful())
{
Log.i("获取网络返回数据操作值", "" + arg0.code());
Log.i("获取网络返回数据", arg0.body().string());
}

}

@Override
public void onFailure(Request arg0, IOException arg1)
{
// TODO Auto-generated method stub

}
});
}

      
 

         2.okHttP也是支持请求缓存的:

       


private final OkHttpClient client = new OkHttpClient();
 
 
File sdcache = getExternalCacheDir(); //设置缓存文件int cacheSize = 10 * 1024 * 1024; // 10 MiB //设置缓存文件大小
client.setCache(new Cache(sdcache.getAbsoluteFile(), cacheSize)); //将缓存参数与Client绑定
 
 

        这个我在网上看到一篇好的实践文章,讲的很好,作者很用心的,okhttp缓存详解

        3.请求回滚撤销操作。

        okhttp在这里操作和Volley还蛮像的。经常会使用到对请求的cancel操作,okhttp的也提供了这方面的接口,call的cancel操作。使用Call.cancel()可以立即停止掉一个正在执行的call。如果一个线程正在写请求或者读响应,将会引发IOException,同时可以通过Request.Builder.tag(Object tag)给请求设置一个标签,并使用OkHttpClient.cancel(Object tag)来取消所有带有这个tag的call。但如果该请求已经在做读写操作的时候,cancel是无法成功的,会抛出IOException异常。

        

public void canceltest() throws Exception {
Request request = new Request.Builder()
.url("http://httpbin.org/delay/2") // This URL is served with a 2 second delay.
.build();

final long startNanos = System.nanoTime();
final Call call = client.newCall(request);

// Schedule a job to cancel the call in 1 second.
executor.schedule(new Runnable() {
@Override
public void run() {
System.out.printf("%.2f Canceling call.%n", (System.nanoTime() - startNanos) / 1e9f);
call.cancel();
System.out.printf("%.2f Canceled call.%n", (System.nanoTime() - startNanos) / 1e9f);
}
}, 1, TimeUnit.SECONDS);

try {
System.out.printf("%.2f Executing call.%n", (System.nanoTime() - startNanos) / 1e9f);
Response respOnse= call.execute();
System.out.printf("call is cancel:" + call.isCanceled() + "%n");
System.out.printf("%.2f Call was expected to fail, but completed: %s%n",
(System.nanoTime() - startNanos) / 1e9f, response);
} catch (IOException e) {
System.out.printf("%.2f Call failed as expected: %s%n",
(System.nanoTime() - startNanos) / 1e9f, e);
}
}
          大家查看打印的信息就可以了,一目了然。

          在这里我就将Okhttp的基本使用介绍完了,其实Okhttp是要封装的,最好不要用原生的。在下一篇我会向大家分享okhttp二次封装,其实我也是参考的鸿神的代码。

       


     

                            

        


推荐阅读
author-avatar
几米小八_198
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有