Reputation: 1
Getting error at NewActivity, as getting error while adding the data in array list and loading it to recycler view. Iam working on a project where I have to load Room data in recycler view. I am getting an error in for loop .. tried using foreach still getting tge same error. Error is showing while using add method to load a data from list to arraylist
package com.app.mycontacts;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Adapter;
import com.app.mycontacts.AddContactActivity.AddContactActivity;
import com.app.mycontacts.Data.ContactDetails;
import com.app.mycontacts.Data.ContactRepository;
import com.app.mycontacts.Data.MyAdapterClass;
import com.app.mycontacts.R;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.ArrayList;
import java.util.List;
public class NewActivity extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
ArrayList<ContactDetails> contactarrayList;
RecyclerView.LayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView= findViewById(R.id.reyclerview);
new LoadDataTask().execute();
}
class LoadDataTask extends AsyncTask<Void,Void,Void> {
ContactRepository contactRepository;
List<ContactDetails> contactList1;
@Override
protected void onPreExecute() {
super.onPreExecute();
contactRepository = new ContactRepository(getApplicationContext());
}
@Override
protected Void doInBackground(Void... voids) {
contactList1=contactRepository.getContactsDetails();
contactarrayList= new ArrayList<ContactDetails>();
for(int i=0; i<=contactList1.size();i++){
contactarrayList.add(contactList1.get(i));
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
super.onPostExecute(unused);
recyclerView.setLayoutManager(new LinearLayoutManager(NewActivity.this));
MyAdapterClass myAdapterClass= new MyAdapterClass(NewActivity.this,contactarrayList);
recyclerView.setAdapter(myAdapterClass);
}
}
}
Tried debugging the code, app is getting crash at the above stage.. Expecting to display the data inserted at room db.
Upvotes: 0
Views: 37
Reputation: 1888
You are indexing wrong in the loop.
The size of the list is 4 but Java indexes from 0. So if you have 4 elements it goes [0], [1], [2], [3]
for(int i=0; i<=contactList1.size();i++){
contactarrayList.add(contactList1.get(i));
}
What you are doing is reaching for the fifth element - [0], [1], [2], [3], [4]
.
This will work:
for(int i=0; i < contactList1.size();i++){
contactarrayList.add(contactList1.get(i));
}
But you don't need to iterate it, you should be able to just call .addAll
.
contactarrayList.addAll(contactList1);
Upvotes: 1