Java 我想获取所有联系人列表(内容提供商)并将其附加到TextView中

Java 我想获取所有联系人列表(内容提供商)并将其附加到TextView中,java,android,Java,Android,我不知道我是否走对了路。仿真器不断显示消息xxx.app已执行停止并请求强制关闭。 这是密码 package fypj.ContactList; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import androi

我不知道我是否走对了路。仿真器不断显示消息xxx.app已执行停止并请求强制关闭。 这是密码

package fypj.ContactList;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.Contacts.People;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class ContactList extends Activity {
    ListView ContactsLV;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        ContactsLV = (ListView)findViewById(R.id.ContactsLV);

        populateContactList();
    }
    public void contentProvider(ContentResolver getContentResolver){
        ContentValues values = new ContentValues();
        values.put(Phone.DISPLAY_NAME, "Jaslyn");   
        values.put(Phone.LABEL, "Jaslyn Goh");
        values.put(Phone.STARRED, 1);
        Uri uri = getContentResolver().insert(Phone.CONTENT_URI, values);

        Uri phoneUri = null;
        Uri emailUri = null;
        phoneUri = Uri.withAppendedPath(uri, People.ContactMethods.CONTENT_DIRECTORY);

        values.clear();
        values.put(Phone.TYPE, Phone.TYPE_MOBILE);
        values.put(Phone.NUMBER, "91289161");
        getContentResolver().insert(phoneUri, values);
        emailUri = Uri.withAppendedPath(uri, People.ContactMethods.CONTENT_DIRECTORY );
        values.clear();
        //values.put(People.ContactMethods.KIND, Contacts.KIND_EMAIL);
        values.put(People.ContactMethods.DATA, "asd@hotmail.com");
        values.put(People.ContactMethods.TYPE, People.ContactMethods.TYPE_HOME);
        getContentResolver().insert(emailUri, values); 

    }
    public void populateContactList(){


        Cursor c = getContacts();
        String[] contacts = new String[]{
                ContactsContract.Data.DISPLAY_NAME,
                //ContactsContract.Data.CONTACT_STATUS,
                //ContactsContract.Contacts.STARRED,
                };
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.main,
                c, contacts, new int[] {R.id.ContactsLV});
        //ContactsLV.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contacts));
        ContactsLV.setAdapter(adapter);

    }
    private Cursor getContacts(){
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        String[] projection = new String[] {
        //ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME,
        };
        String[] selectionArgs = null;
        String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
        //String selection = null;
        String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
        return managedQuery(uri, projection,selection,selectionArgs, sortOrder);
    }
}

线上仔细检查

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.main,
            c, contacts, new int[] {R.id.ContactsLV});


您只需要更改布局整数。只需查看您发布的logcat段,其中没有特定的错误堆栈跟踪。但以下是您可以检查的事项:

  • 检查权限是否正确。 您需要使用Read contacts 允许
  • 您需要选择列ID 预计: 联系人合同联系人。\u ID
  • 正如100rabh所指出的,您需要查看SimpleCorsorAdapter。具体来说,您传递的布局应该是包含要填充数据的字段的布局文件,最后一个整数数组应该对应于必须填充每个列数据的视图id
    从logcat发布您的错误,它将更容易帮助您。很高兴它帮助您认识到这个问题。
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.main,
                c, contacts, new int[] {R.id.ContactsLV});