我为calls.enqueue
创建了一个类,它应该返回json
onResponse
类别:
class EnqueueCalls
{
private static JSONObject object = new JSONObject();
JSONObject enqueue(Call<ResponseBody> calls, final Boolean jsonExist, final Context context)
{
calls.enqueue(new Callback<ResponseBody>()
{
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response)
{
object = new JSONObject(response.body().string());
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e(TAG, "Exception :: " + t.toString());
}
});
Log.e(TAG, "I'm not in enqueue" + object); //when this method is called, control is coming here first
return object;
}
当我调用此方法时,它返回空object
,然后执行calls.enqueue
并将json
值分配给object
。
如何返回object
中分配的onResponse
值?
基本上,我希望在return
执行后执行calls.enqueue
语句。
我试过了:
void enqueues(Call<ResponseBody> calls, final Boolean jsonExist, final Context context)
{
calls.enqueue(new Callback<ResponseBody>()
{ /*get json here*/ }
}
JSONObject getObject() {
return object;
}
并称之为
enqueueCalls.enqueues(calls, true, this);
object = enqueueCalls.getObject();
我仍然得到空物体。
答案 0 :(得分:0)
而不是返回json处理同一类中的json是一个 好的选择。
因此,只有onResponse
才能处理响应所需的事情。
我正在调用一个方法handleResponse(callBackResponse)
,它会使用收到的响应来处理标题,json等。
<强>原因:强>
无法控制响应时间和回调方法的执行。我们不能先说出它来执行calls.enqueue
,然后执行return语句。
期待一些更好的解决方案,如果存在的话。
修改强>
在本课题时,完全没有意识到这些同步和异步方法,回调。正如@bhargav所提到的,在这些回调中没有称为返回的东西。
解决方案
根据响应调用其他方法并传递此响应。
@override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.code() == 200) {
// success
try {
String responseString;
if (response.body() != null) {
responseString = response.body().string();
onApiSuccess(responseString);
} else {
onApiFailure("Server side error: Empty response");
}
} catch (Exception e) {
onApiFailure("Server side error: " + e);
}
}
}