0

I am trying to implement get data from database into recycler view but run window shows no adapter attached.I have watched various tutorials,but nothing helps.I am new to android programming. Please help me to learn and correct my mistakes The code is as follows:

public class RecycleviewAdapter extends RecyclerView.Adapter<RecycleviewAdapter.RecyclerViewHolder>{
    private Context mContext;
    private Cursor mCursor;

    public RecycleviewAdapter(Context context ,Cursor cursor){
        mContext= context;
        mCursor =cursor;
    }
    public class RecyclerViewHolder extends RecyclerView.ViewHolder{
        public TextView time_data1;
        public TextView activity_data;
        public TextView location_data;

        public RecyclerViewHolder(@NonNull View itemView) {
            super(itemView);

            location_data=itemView.findViewById(R.id.location_data);
            activity_data=itemView.findViewById(R.id.activity_data);
            time_data1=itemView.findViewById(R.id.time_data1);

        }

    }

    @NonNull
    @Override
    public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view=inflater.inflate(R.layout.recycle_item,parent,false);
        return new RecyclerViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
        Package pkg = new Package();
        if(!mCursor.move(position)){
            return;
        }
        String time=mCursor.getString(1);
        String name=mCursor.getString(2);
        holder.location_data.setText(name);
        holder.time_data1.setText(time);
        if(pkg.getDst().equals(mCursor.getString(2))){
            holder.activity_data.setText("Delivered");
        }
        else {
            holder.activity_data.setText("In Transit");
        }

    }


    @Override
    public int getItemCount() {
        return mCursor.getCount() ;


    }

    public  void swapCursor(Cursor newCursor){
        if(mCursor!=null){
            mCursor.close();
        }
        mCursor=newCursor;
        if(newCursor!=null){
            notifyDataSetChanged();
        }
    }
}

For activity class

public class Track extends AppCompatActivity {

    Database db = new Database(MySuperApplication.getContext());
    private static final String TAG="MainActivity";
    private RecycleviewAdapter mAdapter;
    private TextView track_data;
    private Button track_button;
    private TextView textdata;
    private TextView textdata2;
    private TextView textdata3;
    private TextView location;
//    private TextView location_data;
//    private TextView time_data1;
//    private TextView activity_data;
//    private TextView activity;
    private TextView time;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_track);




        textdata= findViewById(R.id.textdata);
        track_data=findViewById(R.id.title_track);
        track_button= findViewById(R.id.trackbutton);
        track_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            if(track_data.getText().toString().isEmpty()) {
                openDialog1();
            }
            else{
                Database db = new Database(MySuperApplication.getContext());
                SQLiteDatabase databse=db.getReadableDatabase();
                Cursor cursor = databse.rawQuery("Select * from tracking where track_id= ?",new String[]{track_data.getText().toString()});
//                Cursor cursor = db.retrieveData();
                Package pkg = new Package();
                while(cursor.moveToNext()) {

                    pkg.setId(cursor.getString(0));
                    pkg.setSrc(cursor.getString(1));
                    pkg.setDst(cursor.getString(2));
                    pkg.setDimen(cursor.getString(3));
                    pkg.setWeight(cursor.getString(4));
                    pkg.setCreated(cursor.getString(5));
                    Toast.makeText(getApplicationContext(),"data"+cursor.getString(1),Toast.LENGTH_LONG).show();
                }

                Cursor cursor1 =databse.rawQuery("select * from track_info where track_id1 = ? order by name desc ",new String[]{pkg.getId()});


                while (cursor1.moveToNext()){
                    RecyclerView recyclerView= findViewById(R.id.recycleview);

                    recyclerView.setLayoutManager(new LinearLayoutManager(MySuperApplication.getContext()));
                    mAdapter= new RecycleviewAdapter(MySuperApplication.getContext(),cursor1);
//                  Toast.makeText(getApplicationContext(),"data2"+cursor1.getString(cursor1.getColumnIndex(String.valueOf(1))),Toast.LENGTH_LONG).show();

               }
               Toast.makeText(getApplicationContext(),"data2"+pkg.getId(),Toast.LENGTH_LONG).show();
//                Cursor cursor1= databse.rawQuery("select * from track_info where track_id = ? order by name desc",new String[]{pkg.getId()});
                RelativeLayout relative= findViewById(R.id.relativeLayout1);
                textdata2= findViewById(R.id.textdata2);
                textdata3= findViewById(R.id.textdata3);
                textdata2.setText("Dimension: "+pkg.getDimen()+" cm");
                 textdata3.setText("Weight: "+pkg.getWeight()+" kgs");


            }
            }
        });
        }




    private void openDialog1() {
        dialog dialog= new dialog();
        dialog.show(getSupportFragmentManager(),"dialog");
        }
}

Recycler xml:

<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycleview"
            android:layout_width="408dp"
            android:layout_height="453dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="3dp"
            android:layout_marginLeft="3dp"
            android:layout_marginBottom="0dp" />

recycle_item.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="#ffffff"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="1.0">

    <TextView
        android:id="@+id/location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="11dp"
        android:text="Location" />

    <TextView
        android:id="@+id/location_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="71dp"
        android:layout_marginLeft="71dp"
        android:layout_marginTop="11dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/activity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="30dp"
        android:text="Activity" />

    <TextView
        android:id="@+id/activity_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="71dp"
        android:layout_marginLeft="71dp"
        android:layout_marginTop="30dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="50dp"
        android:text="Date/Time" />

    <TextView
        android:id="@+id/time_data1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="71dp"
        android:layout_marginLeft="71dp"
        android:layout_marginTop="50dp"

         />

</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

3 Answers3

0

You have created adapter but didn't attach it to RecyclerView

mAdapter= new RecycleviewAdapter(MySuperApplication.getContext(),cursor1);

Add this line: recyclerView.setAdapter(yourAdapter);

Duy Khanh Nguyen
  • 454
  • 3
  • 11
0

You are initializing your RecyclerView and setting adapter in loop.

while (cursor1.moveToNext()){
    RecyclerView recyclerView= findViewById(R.id.recycleview);

    recyclerView.setLayoutManager(new LinearLayoutManager(MySuperApplication.getContext()));
    mAdapter= new RecycleviewAdapter(MySuperApplication.getContext(),cursor1);
    //  Toast.makeText(getApplicationContext(),"data2"+cursor1.getString(cursor1.getColumnIndex(String.valueOf(1))),Toast.LENGTH_LONG).show();

}

Do it just one time like this

Cursor cursor1 =databse.rawQuery("select * from track_info where track_id1 = ? order by name desc ",new String[]{pkg.getId()});
recyclerView.setLayoutManager(new LinearLayoutManager(MySuperApplication.getContext()));

mAdapter= new RecycleviewAdapter(MySuperApplication.getContext(),cursor1);
recyclerView.setAdapter(mAdapter);
Rishabh Dhawan
  • 519
  • 1
  • 3
  • 11
0

You forgot to set the adapter.

after this line:

mAdapter= new RecycleviewAdapter(MySuperApplication.getContext(),cursor1);

add:

recyclerView.setAdapter(mAdapter)

and move this outside of while loop.

Nils Ramon
  • 59
  • 8