Работа с потоками и не отображение данных в RecyclerView
В методе getDataFromServerSortTotalCases я беру данные по регионам из 1-о сайта через json. Так как на нем нету регионов Украины я беру их с 2-о сайта (из таблицы так как json нету) для того и был создан 2 поток. У меня не работает именно с Украиной (данные не отображаются в RecyclerView) где данные додаются через 2-й поток по другим странам все нормально (Которые в 1 потоке и из 1-о сайта).
Сам второй поток
private void initThread() {
runnable = new Runnable() {
@Override
public void run() {
getWeb();
}
};
secondThread = new Thread(runnable);
secondThread.start();
}
private void getWeb() {
try {
String url = "https://en.wikipedia.org/wiki/COVID-19_pandemic_in_Ukraine";
doc = Jsoup.connect(url).get();
Elements table = doc.getElementsByTag("tbody");
Element myTable = table.get(2);
for (int i = 1; i < myTable.childrenSize() - 1; i++){
covidRegions.add(new CovidRegion(
myTable.children().get(i).child(0).text(), Integer.parseInt(myTable.children().get(i).child(1).text().replaceAll(",", "")),
myTable.children().get(i).child(2).text(), myTable.children().get(i).child(3).text()
));
}
} catch (IOException e) {
e.printStackTrace();
}
}
тут инициализирую поток 2-й и делаю сортировку
private void getDataFromServerSortTotalCases(final String CountryName) {
String url = "https://corona.lmao.ninja/v2/jhucsse";
final StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressBar.setVisibility(View.GONE);
if (response != null) {
Log.e(TAG, "onResponse: " + response);
try {
JSONArray jsonArray = new JSONArray(response);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject data = jsonArray.getJSONObject(i);
String parseName = data.getString("country");
if (parseName.equals("US")) parseName = "USA";
Log.e(TAG, "onResponse: " + data.getString("country") + " == " + tvDetailCountryName.getText());
if (parseName.equals(CountryName)) {
// Extract JSONObject inside JSONObject
String regionName = data.getString("province");
if (regionName.equals("Recovered") || CountryName.equals(parseName) && regionName.equals("null"))
continue;
JSONObject regionInfo = data.getJSONObject("stats");
if (regionName.equals("null")) {
covidRegions.add(new CovidRegion(
CountryName, Integer.valueOf(tvDetailTotalCases.getText().toString()),
tvDetailTotalDeaths.getText().toString(), tvDetailTotalRecovered.getText().toString()
));
} else {
Log.e(TAG, "onResponse: " + "Region name = " + regionName + "; Confirmed = " + regionInfo.getInt("confirmed") + "; Deaths = " + regionInfo.getString("deaths") + "; Recovered = " + regionInfo.getString("recovered"));
covidRegions.add(new CovidRegion(
regionName, regionInfo.getInt("confirmed"),
regionInfo.getString("deaths"), regionInfo.getString("recovered")
));
}
} else continue;
}
if (CountryName.equals("Ukraine")) {
initThread();
}
if (covidRegions.isEmpty() && !CountryName.equals("Ukraine")) {
covidRegions.add(new CovidRegion(
CountryName, Integer.valueOf(tvDetailTotalCases.getText().toString()),
tvDetailTotalDeaths.getText().toString(), tvDetailTotalRecovered.getText().toString()
));
}
// sort descending
Collections.sort(covidRegions, new Comparator<CovidRegion>() {
@Override
public int compare(CovidRegion o1, CovidRegion o2) {
if (o1.getmConfirmed() > o2.getmConfirmed()) {
return -1;
} else {
return 1;
}
}
});
showRecyclerView();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar.setVisibility(View.GONE);
Log.e(TAG, "onResponse: " + error);
}
});
Volley.newRequestQueue(CovidCountryDetail.this).add(stringRequest);
}