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



    }


}
4

2 回答 2

1

问题是您已经声明了 String 数组,但尚未为它们创建/分配内存:

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

因此,当您尝试访问它们时:

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

它给出了空指针异常。因此,在声明它们的同时创建您的 String 数组:

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

看看数组


并且不要忘记关闭光标。

于 2012-12-28T19:39:23.480 回答
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而不是数组。

于 2012-12-28T19:38:41.683 回答