Как получить асинхронный вызов для возврата ответа в основной поток, используя okhttp?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как получить асинхронный вызов для возврата ответа в основной поток, используя okhttp?

Сообщение Anonymous »

Я пытаюсь создать программу для Android и использую okhttp для вызовов json.
Я действительно хочу вернуть свой ответ за пределы создаваемого потока. Мне нужно создать поток для асинхронного вызова, иначе я получу исключение NetworkOnMainThreadException. Проблема в том, что я не могу получить строку ответа вне метода onResponse, хотя моя строка ответа является глобальной переменной в классе. Поскольку он асинхронный, поток не запустится вовремя, чтобы получить мое значение в глобальной переменной, прежде чем он вернется. Как я могу быть уверен, что получу ответ до того, как он вернет мое значение responseString?

Вот мой код:

public static String getUserProductCategoriesFromServer(Activity activity, final String UID, final String EXPIRY, final String CLIENT, final String ACCESSTOKEN)
{
activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
final OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url(JsonStorage.getJsonUserProductCategories())
.get()
.addHeader("access-token", ACCESSTOKEN)
.addHeader("client", CLIENT)
.addHeader("expiry", EXPIRY)
.addHeader("uid", UID)
.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
{
try
{
response = client.newCall(request).execute();
String json = response.body().string();
JSONObject jsonObject = new JSONObject(json);
JSONArray jsonData = (JSONArray) jsonObject.getJSONArray("user_product_category_names");
responseString = jsonData.toString();
Log.v("TEST1", jsonData.toString()); //RETURNS JSON :D
Log.v("TEST2", responseString); //RETURNS JSON :D
} catch (IOException | JSONException e) {
e.printStackTrace();
}
}
});
}
});
Log.v("TEST3", responseString); //RETURNS "NULL" :(
return responseString;
}


Подробнее здесь: https://stackoverflow.com/questions/501 ... ing-okhttp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»