gpt4 book ai didi

java - 类中的方法返回 null 而不是通过异步调用检索的字符串

转载 作者:行者123 更新时间:2023-11-30 00:24:12 25 4
gpt4 key购买 nike

实用工具.java

/**
* Created by faiz on 15/08/17.
*/

package com.example.android.whereabouts;

import android.util.Log;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;



public class Utils {
private String apiresponse;
private OkHttpClient okHttpClient;

public Utils(String url){
okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("exception",e.toString());
}

@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
apiresponse = response.body().string();
Log.e("onResponse",apiresponse);
}
});

}

public String getData(){
if(apiresponse != null)
return apiresponse ;
else
return "error";

}

}

当我在我的主要 Activity 中实例化此类并尝试记录 getData 方法的返回值时,它记录“错误”而不是变量 apiresponse 的值。

很明显,从服务器获得响应需要一些时间,并且在服务器返回响应之前执行 getData 调用。

那么如何确保在执行 onResponse 之后调用 getData。

最佳答案

您可以在 Activity 中实现它,而不是在 Utility 中获得回调,这样回调就会到达您的 Activity,并且您可以在 UI 中更新而不会出现任何问题。

public  Utils(String url, Callback callback){
okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(callback);

}

在你的 Activity 中,你可以调用,

public void getdata() {
new Utils("[url]", new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("exception",e.toString());
}

@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
apiresponse = response.body().string();
Log.e("onResponse",apiresponse);
// here you can show in UI.
}
})
}

或者您可以创建一个单独的自定义界面,您可以在从服务器获得响应后执行相同的操作。

关于java - 类中的方法返回 null 而不是通过异步调用检索的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45698236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com