Я хочу сохранить результат из метода OnResponse, чтобы использовать его для обновления UI Я попытался сохранить результат в String var, затем назовите его в основной поток, но он не Работа .Сохранить ответ от OkHttp - Android -
вот мой код с некоторыми комментариями, любая помощь?
package com.example.blacknight.testokhttp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import static android.R.string.ok;
public class MainActivity extends AppCompatActivity {
public final String URL_MOVIE = "http://api.themoviedb.org/3/movie/popular?api_key=" + API_KEY;
String res_120 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(URL_MOVIE)
.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 {
Log.v("BK-201 URL: " , response.body().string());
// wanna save the result to update UI
res_120 = response.body().string();
}
});
// just for test : if the result has been saved or not
Log.i("BK-111 : " , res_120);
}
}
Имейте в виду, что тха вызов, вы делаете с клиентом асинхронно и что обратный вызов, который реализует вашу функцию onResponse, вызывается только тогда, когда этот асинхронный вызов завершается. Из-за этого журнал в вашем потоке пользовательского интерфейса будет выполнен до обратного вызова, а переменная res_120 будет пустой. Чтобы выполнить OkHttp синхронно, вы должны вызвать execute(), а не enqueue(), но это заблокирует ваш поток пользовательского интерфейса, и вы не должны этого делать. Например, вы могли бы переместить весь код в Asynctask. –
yup, я пытался сделать это, чтобы избежать использования Asynctask и Loaders, поэтому единственный способ выполнить эту задачу - использовать AsyncTask или что-то в этом роде? –
и вообще лучший способ обновить интерфейс с помощью ответа от OkHttp? –