Search code examples
androidandroid-sqliteandroid-recyclerviewexternal-data-source

How To display External SQLite Database data through Recyclerview in android App?


Last few days, i have learned how to create SQLite Database and display it via RecyclerView by using SQLiteOpenHelper. in . And yes , by the power of google and Stack-overflow and i have learned it very well. However, i am having some trouble to display External database data through RecyclerView now. Last two days i have searched a lot and most them are about only to import external database into application by using "Assets folder and SQLiteAssetsHelper.Have not found anything that explain how to present data via RecyclerView which has been imported. So,can you please give me some guidelines to display External SQLite database data via RecyclerView? Any link or any book or any reference regarding this will be appreciated. Thanks in advance.


Solution

  • As the result of your interaction with database, use should get a data set (an array, or a collection like ArrayList). As I could see, from your explanation, you now know how to get it, but don't know how to pass it to your recyclerView. So you need an adapter to do it. Adapter is a class, will take every object from your array data set, and create(inflate) from it's data a single recyclerView item. After processing all array items the adapter will make a list of items, this way it will fill your recycler view with data, here is a code snippet, that may help you to understand how it works:

    <android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
    

     public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
        private String[] mDataset;
    
        // Provide a reference to the views for each data item
        // Complex data items may need more than one view per item, and
        // you provide access to all the views for a data item in a view holder
        public static class MyViewHolder extends RecyclerView.ViewHolder {
            // each data item is just a string in this case
            public TextView textView;
            public MyViewHolder(TextView v) {
                super(v);
                textView = v;
            }
        }
    
    
        // Provide a suitable constructor (depends on the kind of dataset)
        public MyAdapter(String[] myDataset) {
            mDataset = myDataset;
        }
    
        // Create new views (invoked by the layout manager)
        @Override
        public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                       int viewType) {
            // create a new view
            TextView v = (TextView) LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.my_text_view, parent, false);
            ...
            MyViewHolder vh = new MyViewHolder(v);
            return vh;
        }
    
        // Replace the contents of a view (invoked by the layout manager)
        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            // - get element from your dataset at this position
            // - replace the contents of the view with that element
            holder.textView.setText(mDataset[position]);
    
        }
    
        // Return the size of your dataset (invoked by the layout manager)
        @Override
        public int getItemCount() {
            return mDataset.length;
        }
    }
    

        public class MyActivity extends Activity {
        private RecyclerView recyclerView;
        private RecyclerView.Adapter mAdapter;
        private RecyclerView.LayoutManager layoutManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.my_activity);
            recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    
            // use this setting to improve performance if you know that changes
            // in content do not change the layout size of the RecyclerView
            recyclerView.setHasFixedSize(true);
    
            // use a linear layout manager
            layoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(layoutManager);
    
            // specify an adapter (see also next example)
            mAdapter = new MyAdapter(myDataset);
            recyclerView.setAdapter(mAdapter);
        }
        // ...
    }