Skip to content Skip to sidebar Skip to footer

Printing SQLite Entries Into A ListView

I am having some trouble learning the ins and outs of the SQLite world. I have some code that is allowing me to enter data into a DB. But what i want to do is return this data int

Solution 1:

this is the code of getting data from database and insert into Arraylist and insert into arrayAdapter and than display it in listview .

i just done some editing in your existing code.

com.example.rory.dbtest.DBAdapter db = new com.example.rory.dbtest.DBAdapter(this);
    db.open();

ArrayList<String> data_list=new ArrayList<String>();
ListView lv=(ListView)findViewById(R.id.listView1);
Cursor c = db.getAllRecords();
    if (c.moveToFirst())
    {
        do {
            data_list.add(c.getString(0));
            DisplayRecord(c);
        } while (c.moveToNext());
    }
ArrayAdapter<String> aa=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, data_list);
        lv.setAdapter(aa);

lv - is the object of ListView.


Solution 2:

Create a ListView. Then provide cursorAdapter to the ListView as it's adapter to bind the data in the database to the ListView.

There are examples in the samples folder of the SDK you downloaded in the project called ApiDemos.


Solution 3:

You need to have, 1) listview, 2) Object class, 3) Custom Adapter

Here I have just tried to implement as per your requirement. Since I dont have db I did not try to run. The point to is to five you idea. Because listview is widget that we use more frequently in android. This is the best approach as per my knowledge.

Layouts that required,

activity_list.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ListActivity" >

    <ListView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

row_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp" >
    <TextView
        android:id="@+id/Item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Item" />

    <TextView
        android:id="@+id/Litres"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="litres" />
</LinearLayout>

ListActivity.java :

public class ListActivity extends Activity {

    ArrayList<RowData> rowDataArrayList = new ArrayList<RowData>();
    ListView list;
    ListAdapter listAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        list = (ListView) findViewById(R.id.list);
        listAdapter = new ListAdapter(ListActivity.this, rowDataArrayList);
        list.setAdapter(listAdapter);
        getDataFromDB();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.list, menu);
        return true;
    }

    private void getDataFromDB() {
        rowDataArrayList.clear();

        com.example.rory.dbtest.DBAdapter db = new com.example.rory.dbtest.DBAdapter(
                this);
        db.open();
        Cursor c = db.getAllRecords();
        if (c.moveToFirst()) {
            do {
                /**
                 * Set your data in class
                 */
                RowData rowData = new RowData();
                rowData.setId(c.getString(0));
                rowData.setItem(c.getString(1));
                rowData.setLitres(c.getString(2));
                rowDataArrayList.add(rowData);

            } while (c.moveToNext());
        }
        db.close();
        /**
         * To reflect new data set change in listview
         */
        listAdapter.notifyDataSetChanged();
    }
}

RowData.java : Model[pojo] class to save data and to bind in custom adapter.

public class RowData {
    String Id;
    String Item;
    String Litres;

    public String getId() {
        return Id;
    }
    public void setId(String id) {
        Id = id;
    }
    public String getItem() {
        return Item;
    }
    public void setItem(String item) {
        Item = item;
    }
    public String getLitres() {
        return Litres;
    }
    public void setLitres(String litres) {
        this.Litres = litres;
    }

}

ListAdapter.java : custom adapter to bind in listview

public class ListAdapter extends BaseAdapter {
    private Context mContext;
    private ArrayList<RowData> rowDataArrayList = new ArrayList<RowData>();

    public ListAdapter(Context context, ArrayList<RowData> rowData) {
        mContext = context;
        rowDataArrayList = rowData;
    }

    @Override
    public int getCount() {
        return rowDataArrayList == null ? 0 : rowDataArrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;

        if (convertView == null) {
            Holder holder = new Holder();
            view = View.inflate(mContext, R.layout.row_item, null);
            holder.tvtItem = (TextView) view.findViewById(R.id.Item);
            holder.tvtLitres = (TextView) view.findViewById(R.id.Litres);
            view.setTag(holder);
        } else {
            view = convertView;
        }

        Holder holder = (Holder) view.getTag();
        holder.tvtItem.setText(rowDataArrayList.get(position).getItem());
        holder.tvtLitres.setText(rowDataArrayList.get(position).getLitres());

        return view;
    }

    class Holder {
        TextView tvtItem;
        TextView tvtLitres;
    }
}
public class ListAdapter extends BaseAdapter {
    private Context mContext;
    private ArrayList<RowData> rowDataArrayList = new ArrayList<RowData>();

    public ListAdapter(Context context, ArrayList<RowData> rowData) {
        mContext = context;
        rowDataArrayList = rowData;
    }

    @Override
    public int getCount() {
        return rowDataArrayList == null ? 0 : rowDataArrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;

        if (convertView == null) {
            Holder holder = new Holder();
            view = View.inflate(mContext, R.layout.row_item, null);
            holder.tvtItem = (TextView) view.findViewById(R.id.Item);
            holder.tvtLitres = (TextView) view.findViewById(R.id.Litres);
            view.setTag(holder);
        } else {
            view = convertView;
        }

        Holder holder = (Holder) view.getTag();
        holder.tvtItem.setText(rowDataArrayList.get(position).getItem());
        holder.tvtLitres.setText(rowDataArrayList.get(position).getLitres());

        return view;
    }

    class Holder {
        TextView tvtItem;
        TextView tvtLitres;
    }
}

Post a Comment for "Printing SQLite Entries Into A ListView"