Я пытаюсь добиться следующего: выполнить один синхронный http-запрос, используя Volley's Futures в фоновом потоке, и попросить текущий поток дождаться завершения фонового потока, чтобы впоследствии он мог обработать ответ http.
Что действительно происходит, так это то, что после .join () все кажется зависшим, и я никогда не вхожу в точки останова внутри метода runnable или не запускаю ни одну из команд после join ().
ПРИМЕЧАНИЕ- текущий поток является классом активности, и эта конкретная функция относится к классу Java, сервисы которого вызываются этим действием.Я знаю, что .join () в потоке пользовательского интерфейса вызывает его зависание ... но только до тех пор, пока не завершится фоновый поток, верно?Что ж, когда я использую .wait () вместо .join (), фоновый поток завершается очень быстро.Как будто вызов join не позволяет фоновому потоку выполнять свою работу.
private String requestConversionRatesFromApi() throws InterruptedException
{
final JSONObject[] localResponse = {null};
Runnable runnable = new Runnable()
{
@Override
public void run()
{
String url = "myurl";
RequestQueue queue = Volley.newRequestQueue(_context);
RequestFuture<JSONObject> future = RequestFuture.newFuture();
JsonObjectRequest request = new JsonObjectRequest(url, new JSONObject(), future, future);
queue.add(request);
try {
JSONObject jsonObject = future.get();
localResponse[0] = jsonObject; //doesn't get here either unless I'm using .wait() and then it happens really fast
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
};
Thread t = new Thread(runnable);
t.start();
t.join();
return "foo"; //Doesn't get here
}