2016-04-17 8 views
-1

私は簡単な連絡先アプリを作ろうとしており、データベースからオブジェクトのリストにデータを取得する際に問題が発生しました。私は物体なしでそれをやろうとしました。そして、私はこの方法が実際にはより多く使われていることに気付きました。私がこのアプリでしたいのは、連絡先の名前をリストビューに表示することです。だからここデータベースからオブジェクトのリストにデータを取得し、それをリストビューに表示する方法は?

は私のコードです:

public class Contact { 

//private variables 
int _id; 
String _name; 
String _phone_number; 

// Empty constructor 
public Contact(){ 

} 

public Contact(String name){ 

    this._name=name; 

} 

// constructor 
public Contact(int id, String name, String _phone_number){ 
    this._id = id; 
    this._name = name; 
    this._phone_number = _phone_number; 
} 

// constructor 
public Contact(String name, String _phone_number){ 
    this._name = name; 
    this._phone_number = _phone_number; 
} 
// getting ID 
public int getID(){ 
    return this._id; 
} 

// setting id 
public void setID(int id){ 
    this._id = id; 
} 

// getting name 
public String getName(){ 
    return this._name; 
} 

// setting name 
public void setName(String name){ 
    this._name = name; 
} 

// getting phone number 
public String getPhoneNumber(){ 
    return this._phone_number; 
} 

// setting phone number 
public void setPhoneNumber(String phone_number){ 
    this._phone_number = phone_number; 
} 

@Override 
public String toString() { 
    return _name; 
} 

} 

すべてのデータを取得するために私DBHandlerでの方法:データを取得するために私MainActivityで

public List<Contact> getAllContacts() { 
    List<Contact> contactList = new ArrayList<Contact>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

    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; 
} 

方法は、(ここで間違っているものですが、それを把握するカント):

public void printDatabase() { 


    List<Contact> listOfContacts = handler.getAllContacts(); 
    for (Contact cn : listOfContacts) { 

     cn.getName(); 
     listOfContacts.add(cn); 


    } 




} 
+0

あなたはすべての連絡先を 'listofContacts'リストに入れていますか?あなたはどんな厳しい問題に直面していますか?あなたのlogcatを投稿してください。 – Yashasvi

+0

連絡先の名前がリストビュー – Nenco

答えて

1

2つの問題:

1)@RaviTejaが指摘しているように、ループ内ではなく、onCreate()メソッドですべての初期化を行います。その後、notifydatasetchanged()に電話してください。

2) ArrayAdapterの公式文書の引用:のTextViewが参照されるが、それはアレイ内の各オブジェクトの のtoString()で充填される

を。 カスタムオブジェクトのリストまたは配列を追加できます。オブジェクトのtoString()メソッドをオーバーライドして、 リストに表示されるテキストを決定します。

だから、あなたは何をすべきか分かっています。あなたがループ内であなたのリストビューとアダプタを初期化する必要はありません

public String toString() 
{ 
    return "name: "+_name; 
} 
+0

に表示されていないので、更新されたトピックのようにtoStringメソッドを追加しました。リストビュー部分をonメソッドに移動し、forループを削除しました。だから、私のprintDatabaseメソッドはどのように見えますか?私はそれをかなり頻繁に使用しています(連絡先を削除した後など) – Nenco

+0

あなたのユースケースによれば、あなたのプリントデータベースはアダプタのリストを更新し、 'notifydatasetchanged()'メソッドを呼び出す必要があります。 – Yashasvi

+0

助けてくれた皆様に感謝します – Nenco

1

:ような何かにあなたのContactクラスのtoString()メソッドを実装します。

listView = (ListView) findViewById(R.id.listview); //global 
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,listOfContacts); 
listView.setAdapter(adapter); 

移動のうち、コードの上の部分あなたのonCreate()と宣言するアダプタで、このコードはlist.Thisに連絡先を追加した後adapter.notfiyDataSetChanged()を呼び出すglobally.Thenためloop.No loop.Placeの必要があります。リストを更新します。

関連する問題