安卓OkHttpClient中onResponse方法内数据的调用

原创 2018年04月16日 21:28:51

在学习中,难免有一些坑,每次遇到坑我就和大家分享一下,在okhttp中我们成功的访问后台,然后从onResponse中获得了返回的json数据(安卓和后台一般用json格式做数据交互),然后你会发现这个返回的数据你只能在onResponse方法内调用,放到方法外,这个数据就不好用,也不是不好用就是你弄不出去,追根揭底就是okhttp是异步请求,你没办法将异步请求的结果放到主线程中使用,但是我们有没有方法做到上面效果呢?有的,往下看

   @Override
    public ArrayList<Music> call() throws Exception {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(httpURL+"/HttpWeb/selectMusicInformation")//请求的url
                .get()
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {

            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final  String res = response.body().string();

                        try{
                            Gson gson = new Gson();
                            list = gson.fromJson(res, new TypeToken<ArrayList<Music>>() {
                            }.getType());
                        }catch (JsonSyntaxException e){
                            e.printStackTrace();
                        }
            }
        });
        return list;
    }

call()这个方法是继承了Callable这个接口,它可以等你的异步线程完成了,然后将你获得的数据作为方法的返回值,这样你就可以获得这个数据

public class MainActivity extends Activity implements View.OnClickListener,Callable<ArrayList<Music>>{


反正我在写这个okhttp的方法在这里耽误了好几天,结果就是异步线程的数据,没办法在主线程中调用,Callable()这个接口中的方法恰好可以等你的异步线程完成了,然后把结果返回,这样就可以在主线程中使用,我不知道这样会不会给程序带来麻烦,只是为了完成功能。大佬勿喷


什么是XForms?

什么是XForms?当前的Web表单的设计无法从表单的表述中分离表单的目的或用途,然而XForms, , 由分别描述表单行为和样式的独立单元组成,这就允许柔性表述选择, 包含经典的XHTML表单,附加...
  • FlySpace
  • FlySpace
  • 2003-05-17 17:29:00
  • 1508

Android -- 使用OKhttp获取response时遇到的坑

最近在使用OKhttp请求服务器数据的时候,发现打印的时候显示数据正常,但是在传递到解析函数的时候发生错误: 运行到response.body().string()一步时抛异常,java.lang....
  • u014616515
  • u014616515
  • 2016-08-14 09:45:06
  • 16465

教你写Android网络框架之Request、Response类与请求队列

在教你写Android网络框架之基本架构一文中我们已经介绍了SimpleNet网络框架的基本结构,今天我们就开始从代码的角度来开始切入该网络框架的实现,在剖析的同时我们会分析设计思路,以及为什么要这样...
  • bboyfeiyu
  • bboyfeiyu
  • 2015-01-22 13:55:01
  • 13970

Volley常见问题onResponse Callback的实现

Volley Request是异步的,在onResponse获得的数据并不能在最后用返回,换言之,返回的还是初始化的arraylist。那么解决办法只能从onResponse中获取数据了,最简单的办法...
  • zaneran
  • zaneran
  • 2016-09-13 04:50:18
  • 1767

Android okhttp+rxjava实现多文件下载和断点续传

首先先感谢风神,核心代码源于他的这篇微博http://blog.csdn.net/cfy137000/article/details/54838608,思路很棒。基于他的代码做了一些改动,实现我所需功...
  • bit_kaki
  • bit_kaki
  • 2017-05-19 21:50:58
  • 6447

Android Okhttp3+Retrofit2网络加载效率优化

本文主要介绍了如何在一个老项目中替换将旧的Http框架替换成OkHttp3或Retrofit2。并介绍了使用OkHttp3和Retrofit2发送GET和POST请求的代码示例。介绍了Retrofit...
  • lvshaorong
  • lvshaorong
  • 2016-06-30 17:00:05
  • 10187

Android_OkHttp+Picasso+RecyclerView实现网络图片下载瀑布流

此效果和上篇答题相同,思路一致,是一种效果的两种实现方式,只是用到的框架不同,内部差异不同。 也是大致描述以下实现步骤: 导入的架包有squareup-okhttp,squareup-okio,squ...
  • zcr317121966
  • zcr317121966
  • 2016-08-26 20:39:45
  • 2570

Android从零开搞系列:网络框架系列(2)OkHttp+POST图片(下)

本篇博客继续记录OkHttp的用法如果有兴趣可以返回阅读本系列的上部分:http://blog.csdn.net/wjzj000/article/details/53677706 转载请注意:ht...
  • wjzj000
  • wjzj000
  • 2016-12-17 19:14:47
  • 601

手动缓存Retrofit+OkHttp响应体,不再局限于Get请求缓存

OkHttp的缓存问题,主要是通过http协议里面的control-cache控制缓存,而且是仅仅只能是Get请求才能缓存,如果Post请求OkHttp会让response返回null,同时报504错...
  • Iamzgx
  • Iamzgx
  • 2016-06-27 00:22:18
  • 7337

安卓 Volley+OkHttp3+Gson(Jackson)开源库的封装过程

前言寒假学习了一下安卓的网络通信部分,扩展和封装了volley,还是挺有意思的,所以写一篇博客来记录一下整个历程吧。大家都知道,安卓网络通信有很多解决方案,比如HttpURLConnection,Ok...
  • qq_14815049
  • qq_14815049
  • 2016-02-23 11:38:12
  • 1112
收藏助手
不良信息举报
您举报文章:安卓OkHttpClient中onResponse方法内数据的调用
举报原因:
原因补充:

(最多只允许输入30个字)