执行calls.enqueue后执行一个语句,进行改造

时间:2017-01-23 06:55:49

标签: json retrofit2

我为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();

我仍然得到空物体。

1 个答案:

答案 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);
            }
     }
}