Нулевой размер arraylist в recyclerview и отсутствие отображения данных

Я пытаюсь получить ответ в recyclerview. Я получаю ответ в журнале, но когда я добавляю его в recyclerView, данные не отображаются. Я не могу понять, что мне не хватает. Это меня так сильно раздражает, пожалуйста, помогите

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
ArrayList<Model> arrayList;

@NonNull
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
    return new MyViewHolder(itemView);
}

public RecyclerViewAdapter(ArrayList<Model> arrayList) {
    this.arrayList = arrayList;
    System.out.println("size 111  "+arrayList.size());
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
    Model model = arrayList.get(i);

    myViewHolder.tvName.setText(model.getName());
    myViewHolder.tvEmail.setText(model.getEmail());
    myViewHolder.tvMobile.setText(model.getMobile());

}

@Override
public int getItemCount() {
    System.out.println("size "+arrayList.size());
    return arrayList.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {
    TextView tvName, tvEmail, tvMobile;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        tvName = (TextView) itemView.findViewById(R.id.tvName);
        tvEmail = (TextView) itemView.findViewById(R.id.tvEmail);
        tvMobile = (TextView) itemView.findViewById(R.id.tvMobile);
    }
}

}

И это мой класс активности

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
Model model;
ArrayList<Model> arrayList;
RecyclerView recyclerView;
RecyclerViewAdapter recyclerViewAdapter;
String url = "https://api.androidhive.info/volley/person_array.json";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    arrayList = new ArrayList<>();
    recyclerView = (RecyclerView)findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));


    recyclerViewAdapter = new RecyclerViewAdapter(arrayList);
    recyclerView.setAdapter(recyclerViewAdapter);
    getData();



}

protected void getData() {
    final ProgressDialog dialog = new ProgressDialog(MainActivity.this);
    dialog.setMessage("Loading......");
    dialog.show();
    JsonArrayRequest arrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            Log.e(TAG, "onResponse: "+response.toString() );
            dialog.hide();
            for (int i=0;i<response.length();i++){
                try {
                    JSONObject object = (JSONObject) response.get(i);
                    String name = object.getString("name");
                    System.out.println("name "+name);
                    String email = object.getString("email");
                    JSONObject object1 = object.getJSONObject("phone");
                    String mobile = object1.getString("mobile");
                    System.out.println("mobile "+mobile);
                    model = new Model(name,email,mobile);
                    arrayList.add(model);
                    System.out.println("activity sizee"+arrayList.size());
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

Пробовал все, но ничего не получилось, пожалуйста, помогите мне с этой проблемой. Где я ошибаюсь. Пожалуйста помоги

1
0
763
1

Ответы 1

Вам необходимо уведомить об изменениях с помощью notifyDataSetChanged после цикла for, чтобы сообщить адаптеру, что нужно обновить список. Наблюдатель адаптера получит внутреннее уведомление о том, что источник данных был изменен, и ему необходимо пройти через него и выполнить повторную привязку данных с макетом.

@Override
    public void onResponse(JSONArray response) {
        Log.e(TAG, "onResponse: "+response.toString() );
        dialog.hide();
        for (int i=0;i<response.length();i++){
            try {
                JSONObject object = (JSONObject) response.get(i);
                String name = object.getString("name");
                System.out.println("name "+name);
                String email = object.getString("email");
                JSONObject object1 = object.getJSONObject("phone");
                String mobile = object1.getString("mobile");
                System.out.println("mobile "+mobile);
                model = new Model(name,email,mobile);
                arrayList.add(model);
                System.out.println("activity sizee"+arrayList.size());
            } catch (JSONException e) {
                e.printStackTrace();
            }
           recyclerViewAdapter.notifyDataSetChanged();
           //^^^^^^^^^^^^^^^^^^^^^
        }

Другие вопросы по теме