2013-08-16 2 views
3

Как я искал целую сеть, все еще находящуюся в проблеме с ListView From Sqlite. После того, как вы так много искали, я пытаюсь выполнить свой проект на примере улей андроида Link here. Таким образом, в этом классе Database Handler они предоставили функцию i.e List getAllContacts(), чтобы получить все данные sqlite в формате списка. Я реализовал это в своем проекте, используя функцию выше в ViewContact.class. ПРОБЛЕМА заключается в том, что я не понимаю, как получить все данные в ListView, используя этот тип метода или любым другим способом.ListView From Sqlite in android

Смотрите мой код (ViewContact.class):

public class ViewContact extends Activity { 
DatabaseHandler helper = new DatabaseHandler(this); 
String a; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.row); 
    ListView listContent = (ListView)findViewById(R.id.listView1); 
    } 
public List<Contact> getAllContacts() { 
    List<Contact> contactList = new ArrayList<Contact>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM contacts"; 
    SQLiteDatabase db = helper.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;}} 

EDIT:


См После @GrIsHu ответить на выход:

+0

Вы должны связать данные в ListView с помощью класса адаптера. – GrIsHu

ответ

3

Попытка связать данные в ListView, как показано ниже:

List<Contact> contact = new ArrayList<Contact>(); 
contact=getAllContacts();  
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, contact); 
listContent.setAdapter(adapter); 
+0

Эй, добавив это в свой код, я получаю имя моего пакета с помощью Contact @ 4052 ..... Что-то! необходимы некоторые другие изменения! выручи меня! – arraystack

+0

Он показывает индекс списков контактов. просто добавьте только имя в свой arraylist вашего метода getAllContact, а затем попробуйте. – GrIsHu

+0

Я не получаю это правильно. Какие изменения мне нужно сделать в этом методе «новый ArrayList ();» – arraystack

1

Ниже приведен код, в котором я полагаю, что вы можете удовлетворить ваши требования. В приведенном ниже коде я собирал контакты, сохраненные в моей базе данных, и отображал их в listView. Если пользователь хочет удалить контакт из базы данных, он должен долго нажимать на элемент, и, используя появившееся диалоговое окно, он может удалить контакт. Ниже приведен код:

public class viewContacts extends ListActivity { 

     private static final String TAG = "MYRECORDER"; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.showcontacts); 

      //Creating a List View 
      ArrayList<String> listItems = new ArrayList<String>(); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, listItems); 
      ListView mylist=(ListView) findViewById(android.R.id.list); 
      mylist.setAdapter(adapter); 


//Creating or opening an eisting database 
      SQLiteDatabase db=openOrCreateDatabase("MYDB", Context.MODE_PRIVATE, null); 

//Getting a cursor to fetch data from the database 
       Cursor c=db.rawQuery("SELECT Number,Name FROM myTbl", null); 
       Log.d(TAG, "Cursor reference obtained..."); 
       c.moveToFirst(); 
       Log.d(TAG, "Cursor Moved to First Number...."); 
       if(c!=null){ 
//If there are contents in the database, then c!=null, so using do-while loop access data // in database 
       do{ 
        String num=c.getString(c.getColumnIndex("Number")); 
        String name=c.getString(c.getColumnIndex("Name")); 
        String Name_num=name+" : "+num; 
        listItems.add(Name_num); 
        c.moveToNext(); 
       }while(!c.isAfterLast()); 

//update the list 
       adapter.notifyDataSetChanged(); 

//closing the database after use 
       db.close(); 

//Below is the code to delete items in data base 
       mylist.setOnItemClickListener(new OnItemClickListener() { 
        String str=null;  
        public void onItemClick(AdapterView<?> arg0, View view, 
          int arg2, long arg3) { 

         // TODO Auto-generated method stub 
         String item = ((TextView)view).getText().toString(); 
         str=item.substring(item.lastIndexOf('+')); 
         Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show(); 
         //Creating an Alert Dialog 
         AlertDialog .Builder builder=new AlertDialog.Builder(viewContacts.this); 
         builder.setMessage("Are you sure you want to delete the contact "+str+" ?"); 
         builder.setCancelable(false); 
         builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

          public void onClick(DialogInterface dialog, int which) { 
           // TODO Auto-generated method stub 
           SQLiteDatabase db=openOrCreateDatabase("MYDB", MODE_PRIVATE, null); 
           Toast.makeText(getBaseContext(), "The contact: "+str+" was successfully deleted", Toast.LENGTH_LONG).show(); 
           String table="myTbl"; 
           String whereClause = "Number = ?"; 
           String[] whereArgs = new String[] { str }; 
           db.delete(table, whereClause, whereArgs); 
           db.close(); 
          } 
         }); 
         builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

         public void onClick(DialogInterface dialog, int which) { 
          // TODO Auto-generated method stub 
          dialog.cancel(); 
         } 
        }); 
         AlertDialog alert=builder.create(); 
         alert.show(); 
        }   
       }); 
     } 
     } 
    } 
0

Я решаю, что добавление функции ToString для моего класса объекта.

В вашем случае, добавьте эту функцию в класс контакта

public String toString(){ 
    return name; 
}