2012-12-28 252 views
-3

我试图从手机中的联系人中选择显示名称,手机号码,并使用列表视图在列表中显示这些号码。但我发现了空指针异常而运行下面的代码:空指针异常

public class SeeActivity extends ListActivity { 
    public String [] allname; 
     public String [] allnumber; 
     public int listcount=0; 
     public String [] details; 
     String[] PROJECTION = new String[] { 
       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER 




     }; 
     @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


; 

     Cursor phone= getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,PROJECTION ,null ,null ,null); 

     try{ 
     while(phone.moveToNext()) 
     { 

      String name= phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String number=phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      allname[listcount]=name; 
      allnumber[listcount]=number; 
      details [listcount]=name+" "+number; 
      listcount=listcount+1; 

     } 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1,details); 
     setListAdapter(adapter); 
     ListView l=getListView(); 
      l.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       Toast.makeText(getApplicationContext(),((TextView)arg1).getText() , Toast.LENGTH_SHORT).show(); 



      } 
     });} 
     catch(Exception e) 
     { 
      Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show(); 
     } 



    } 


} 
+1

Stacktrace在哪里? (在哪一行是抛出的NullPointerException?) – MrSmith42

+0

你可能想要阅读以下第一个http://developer.android.com/guide/topics/providers/contacts-provider.html#RawContactBasics – David

回答

1

的问题是,您已声明字符串数组,但您尚未创建他们/分配的内存:

public String [] allname; 
public String [] allnumber; 
public int listcount=0; 
public String [] details; 

所以,当你试图访问他们喜欢的:

allname[listcount]=name; 
allnumber[listcount]=number; 
details [listcount]=name+" "+number; 

它会给出空指针异常。因此,创建字符串数组,而他们宣称:

public String[] allname = new String[100]; 
public String[] allnumber = new String[100]; 
public int listcount = 0; 
public String[] details = new String[100]; 

看一看arrays


而且不要忘记关闭你的光标。

0
public String [] allname; 
    public String [] allnumber; 

都指向null;并遵循分配结果NullPointerException

 allname[listcount]=name; 
     allnumber[listcount]=number; 

更改阵列创建语句是这样的:

public String[] allname = new String[10]; 
public String[] allnumber = new String[10]; 

如果你不知道提前大小,我建议使用类似ArrayList而不是阵列。