-3

電話の連絡先から表示名、携帯電話番号を選択し、リストビューを使用してこれらをリストに表示しようとしています。しかし、次のコードを実行しているときにnullポインター例外が発生します。

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;

nullポインタ例外が発生します。したがって、文字列配列を宣言しながら作成します。

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 に答える