0
我創建了一個類calls.enqueue
,它應該返回其在onResponse
收到json
執行語句,改造
類:
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
。
如何返回在onResponse
中分配的object
值?
基本上,我希望執行calls.enqueue
後執行return
語句。
我已經試過:
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();
不過我得到空的對象。
排隊是異步的,這就是爲什麼你有回調,回調代碼只在網絡請求完成後才執行。 – Bhargav
是啊@巴加夫我應該怎麼做才能返回'onResponse' – Prabs
你不明白一些基本的東西,你在回調中寫的代碼發生在你的函數完成執行後(甚至可能是後來,不知道什麼時候它會運行那個點),所以沒有'returns'這樣的東西,每當網絡請求完成時你需要執行需要服務器發送的對象的代碼,所以無論代碼依賴於什麼關於對象的數據,你需要把它放在回調中。 – Bhargav