#java #android #multithreading #android-volley
Вопрос:
Прослушиватель работает в основном потоке, хотя я добавляю запрос JsonArrayRequest в очередь через другой поток.
private void runParse() {
WordSearcher word = new WordSearcher(mQueue);
Thread th = new Thread(() -> {
word.jsonParse();
});
th.start();
try {
th.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
text.setText(word.getText());
translation.setText(word.getTranslation());
}
Этот метод работает во втором потоке:
public void jsonParse() {
String url = "https://dictionary.skyeng.ru/api/public/v1/words/search?search=find ";
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null, listener,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Log.d("MyLog", "onErrorResponse");
}
});
requestQueue.add(request);
}
Прослушиватель, в котором я получаю данные. Он работает в основном потоке, хотя и не должен:
Response.Listener<JSONArray> listener = (response) -> {
try {
JSONObject object = response.getJSONObject(0);
JSONArray meaningsArray = object.getJSONArray("meanings");
JSONObject meaningObject = meaningsArray.getJSONObject(0);
text = object.getString("text");
translation = meaningObject.getJSONObject("translation").getString("text");
image = meaningObject.getString("imageUrl");
sound = meaningObject.getString("soundUrl");
} catch (JSONException e) {
e.printStackTrace();
Log.d("MyLog", "Parse time Error");
}
};