-1

これは、電話から連絡先を取得し、リストビューに電話番号を持つ連絡先を一覧表示するアプリです。しかし、mAdaper.notifyDataSetChanged(); のときにアプリがクラッシュします。と呼ばれています :/ 助けてください。

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

    }
4

2 に答える 2

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();
于 2013-05-08T00:18:40.073 に答える