Не работает RecyclerView

public class Main2Activity extends AppCompatActivity {

    private static ArrayList<WeatherDay> weatherDays;
    private static RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Intent intent = getIntent();
        String city=intent.getStringExtra("city");
        String query=String.format("https://api.weatherbit.io/v2.0/forecast/daily?city=%s&key=4e2d6343c40d4652b80a70190ff5ac87",city);
        recyclerView=findViewById(R.id.recyclerView);
          weatherDays=new ArrayList<>();
        DownloadTask task = new DownloadTask();
        try {
            String result=task.execute(query).get();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        WeatherDayAdapter weatherDayAdapter = new WeatherDayAdapter(weatherDays);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(weatherDayAdapter);

    }
    public static class DownloadTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... strings) {
            StringBuilder result = new StringBuilder();
            URL url = null;
            HttpURLConnection urlConnection = null;
            try {
                url = new URL(strings[0]);
                urlConnection = (HttpURLConnection) url.openConnection();
                InputStream in = urlConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(in);
                BufferedReader breader = new BufferedReader(reader);
                String line = breader.readLine();
                while (line != null) {
                    result.append(line);
                    line = breader.readLine();
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }
            return result.toString();
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            try {
                JSONObject jsonObject = new JSONObject(s);
                JSONArray jsonArray=jsonObject.getJSONArray("data");
                for(int i=0;i<16;i++) {
                    JSONObject object = jsonArray.getJSONObject(i);
                    String date=object.getString("datetime");
                    String mintemp = object.getString("min_temp");
                    String maxtemp=object.getString("max_temp");
                    String descr=object.getJSONObject("weather").getString("description");
                    String result = date+",."+mintemp+",."+maxtemp+",."+descr;
                    WeatherDay weatherDay = new WeatherDay(result);
                    weatherDays.add(weatherDay);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

если текст выводить в консоль в методе onPostExecute тогда все работает. А вот на экран через RecyclerView ничего не выводится. Вообще не понимаю как это исправить. Вот код адаптера:

public class WeatherDayAdapter extends  RecyclerView.Adapter<WeatherDayAdapter.WeatherDayViewHolder> {

    private ArrayList<WeatherDay> weatherDays;
    public WeatherDayAdapter(ArrayList<WeatherDay> weatherDays) { this.weatherDays=weatherDays;}


    @NonNull
    @Override
    public WeatherDayAdapter.WeatherDayViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.weatherday, parent, false);
        return new WeatherDayViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull WeatherDayAdapter.WeatherDayViewHolder holder, int position) {
        WeatherDay weatherDay = weatherDays.get(position);
        holder.textViewDate.setText(weatherDay.getDate());
        holder.textViewMinTemp.setText(weatherDay.getMinTemp());
        holder.textViewMaxTemp.setText(weatherDay.getMaxTemp());
        holder.textViewDescr.setText(weatherDay.getDescr());
    }

    @Override
    public int getItemCount() {
        return weatherDays.size();
    }

    class WeatherDayViewHolder extends RecyclerView.ViewHolder {
        private TextView textViewDate;
        private TextView textViewMinTemp;
        private TextView textViewMaxTemp;
        private TextView textViewDescr;

        public WeatherDayViewHolder(@NonNull View itemView) {
            super(itemView);
            textViewDate=itemView.findViewById(R.id.textViewDate);
            textViewMinTemp=itemView.findViewById(R.id.textViewMinTemp);
            textViewMaxTemp=itemView.findViewById(R.id.textViewMaxTemp);
            textViewDescr=itemView.findViewById(R.id.textViewDescr);
        }
    }
}

Ответы (1 шт):

Автор решения: Mr.Krotos

Я так подозреваю... У вас данные не успевают загрузится, а адаптер уже собран и кинут в recyclerview. Ваш downloadtask уходит при вызове в отдельный поток, а после него тут же устонавливается адаптер, пока downloadtask ещё развертывается и разбирвет скаченное в отедьном потоке.

→ Ссылка