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

在学习中,难免有一些坑,每次遇到坑我就和大家分享一下,在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()这个接口中的方法恰好可以等你的异步线程完成了,然后把结果返回,这样就可以在主线程中使用,我不知道这样会不会给程序带来麻烦,只是为了完成功能。大佬勿喷


  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Android Studio可以通过网络请求的方式调用词典API。以下是一种常见的实现方式: 1. 首先,在Android Studio创建一个新的项目或打开现有项目。 2. 在项目的`build.gradle`文件添加网络请求库的依赖,例如使用OkHttp库: ```groovy dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.1' } ``` 3. 在需要调用词典API的地方,创建一个网络请求的方法。例如,可以在一个按钮的点击事件调用方法: ```java import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import java.io.IOException; // ... private void callDictionaryAPI() { OkHttpClient client = new OkHttpClient(); String url = "https://api.dictionary.com/endpoint"; // 替换为实际的API地址 Request request = new Request.Builder() .url(url) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 处理请求失败的情况 } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String responseBody = response.body().string(); // 处理API返回的数据 } else { // 处理请求失败的情况 } } }); } ``` 4. 在`callDictionaryAPI()`方法,替换`url`变量为实际的词典API地址。根据API的要求,可能需要在请求添加参数或者请求头。 5. 在`onResponse()`方法,可以处理API返回的数据。根据API的响应格式,可能需要解析JSON或者XML数据。 这样,当调用`callDictionaryAPI()`方法时,Android Studio就会发送网络请求并获取词典API的响应数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值