0

I checked out this tutorial: http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

Now I want to load this data in a Listview. Here is my try:

private ArrayAdapter<Contact> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        DatabaseHandler db = new DatabaseHandler(this);

        /**
         * CRUD Operations
         * */
        // Inserting Contacts
        Log.d("Insert: ", "Inserting ..");
        db.addContact(new Contact("Ravi", "9100000000"));
        db.addContact(new Contact("Srinivas", "9199999999"));
        db.addContact(new Contact("Tommy", "9522222222"));
        db.addContact(new Contact("Karthik", "9533333333"));

        // Reading all contacts
        Log.d("Reading: ", "Reading all contacts..");
        List<Contact> contacts = db.getAllContacts();

        for (Contact cn : contacts) {
            String log = "Id: " + cn.getID() + " ,Name: " + cn.getName() + " ,Phone: " + cn.getPhoneNumber();
            // Writing Contacts to log
            Log.d("Name: ", log);

        }
        

        // create the adapter using the cursor pointing to the desired data
        //as well as the layout information
        adapter = new ArrayAdapter<Contact>(getApplicationContext(), R.layout.list_view, contacts);


        ListView listView = (ListView) findViewById(R.id.list);
        // Assign adapter to ListView
        listView.setAdapter(dataAdapter);

    }

So the Class from the Contact you can see in the url from androidhive.

4
  • to set the retrieved data from sqlite into a listview Commented Sep 30, 2015 at 18:20
  • 1
    Youve already set that,you getting any error? post your Logcat too,so can sort the root cause Commented Sep 30, 2015 at 18:23
  • the listview displays no data Commented Sep 30, 2015 at 18:29
  • I am just using the wrong adapter.. But it displays strange data like the package name of my app and something else. How can I only display the name in the listview? Commented Sep 30, 2015 at 18:41

2 Answers 2

1

Well the thing is Your Supplying Contact to ArrayAdapter ,But it needs String to populate Values

or Use CustomAdapter to popluate all Vaues regarding Contact in List

1.Create a Layout for single item,in your case create list_item.xml in Layout Folder

list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="80dp"
    android:padding="6dip" >

    <TextView
        android:id="@+id/contactname"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/contactphone"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp" />

</RelativeLayout> 

2.Create CustomAdapter which extends ArrayAdapter

CustomAdapter.java

 public class CustomAdapter extends ArrayAdapter<Contacts> {
      private final Context context;
      private ArrayList<Contacts> contacts;
    
      public CustomAdapter(Context context,ArrayList<Contacts> contacts) {
        super(context, R.layout.list_item, values);
        this.context = context;
        this.contacts= contacts;
      }
    
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.list_item, parent, false);
        TextView name= (TextView) rowView.findViewById(R.id.contactname);
        TextView mobile= (TextView) rowView.findViewById(R.id.contactphone);
        name.setText(contacts.get(position).getName());
        mobile.setText(contacts.get(position).getPhoneNumber());
        return rowView;
      }
    } 

3.Call the Adpater from Activity

CustomAdapter adapter = new CustomAdapter (getApplicationContext(),contacts);
ListView listView = (ListView) findViewById(R.id.list);
// Assign adapter to ListView
listView.setAdapter(adapter);
Sign up to request clarification or add additional context in comments.

Comments

0

You can try this :

1st Step Reading all the Contacts from database one by one through loop :

 protected void onDestroy() {
        super.onDestroy();
    }
    //reading all the contacts from database
    public List<Contact> getAllContacts() {
        List<Contact> contactList = new ArrayList<Contact>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + <Table-Name>;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Contact contact = new Contact();
                contact.setID(Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                contact.setPhoneNumber(cursor.getString(2));
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

2nd Step

Now you can call this getAllContacts() in your onCreate and extract out all the contacts and save in the Adapter,then show in your ListView.

Hope it helps. :)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.