2013-05-08 102 views
-1

這是一個應用程序,它應該從手機獲取聯繫人,並列出在列表視圖中有電話號碼的應用程序。 但是,應用程序崩潰時mAdaper.notifyDataSetChanged();叫:/ 請幫忙。當我調用mAdaper.notifyDataSetChanged()時,Android應用程序崩潰;

public class MainActivity extends Activity{ 
    static int num = 0; 

    ListView lv; 
    ArrayAdapter<String> mAdaper; 
    ArrayList<String> contacts = new ArrayList<String>(); 


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


     getContacts(); 

     lv = (ListView)findViewById(R.id.listView1); 
     mAdaper = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contacts); 

     lv.setAdapter(mAdaper); 

    } 

    private void getContacts(){ 

     ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, // projection, 
       null, // selection, 
       null, // selectionArgs, 
       "_ID DESC" // sortOrder 
     ); 

     if (cur.getCount() > 0) { 
      while (cur.moveToNext() && num < 10) { 
       String id = cur.getString(cur 
         .getColumnIndex(ContactsContract.Contacts._ID)); 
       String name = cur 
         .getString(cur 
           .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if (Integer 
         .parseInt(cur.getString(cur 
           .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 

        // TableRow row = new TableRow(this); 
        TextView tv = new TextView(this); 
        String row = id + " - " + name; 
        contacts.add(row); 
        //mAdaper.add(row); 
        num++; 

       } 
      } 
     } 
     mAdaper.notifyDataSetChanged(); 

    } 

回答

1

您在初始化mAdapter之前調用getContacts()。在getContacts()中,您正在調用mAdapter.notifyDataSetChanged();.此時,mAdapter尚未初始化。

在初始化mAdapter之後調用getContacts()。

lv = (ListView)findViewById(R.id.listView1); 
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contacts); 
lv.setAdapter(mAdapter); 
getContacts(); 
相關問題