Я много огляделся по google и stackoverflow и, наконец, написал код, который, как я думаю, должен получить контакты в списке, как и ожидалось. Но я всегда получаю эту ошибку. Может кто-нибудь мне помочь ?android: проблема с заполнением списка с контактами
Это мой Основной класс:
package com.shoaiblalich.pinchme;
import java.util.ArrayList;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.RawContacts;
import android.app.Activity;
import android.database.Cursor;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateContactList();
}
private void populateContactList() {
// TODO Auto-generated method stub
Cursor cur = getContacts();
String[] fields = new String[] {ContactsContract.Data.DISPLAY_NAME};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,cur,fields,new int[] {android.R.id.text1});;
ListView lv = (ListView) findViewById(R.id.listView1);
lv.setAdapter(adapter);
}
@SuppressWarnings("deprecation")
private Cursor getContacts() {
// TODO Auto-generated method stub
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String [] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME };
String selection = null;
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + "COLLATE LOCALIZED ASC";
return managedQuery(uri,projection,selection,selectionArgs,sortOrder);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
И это то, что мои LogCat дисплеи:
01-02 12:28:44.037: E/AndroidRuntime(8074): FATAL EXCEPTION: main
01-02 12:28:44.037: E/AndroidRuntime(8074): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shoaiblalich.pinchme/com.shoaiblalich.pinchme.Main}: android.database.sqlite.SQLiteException: near "LOCALIZED": syntax error (code 1): , while compiling: SELECT _id, display_name FROM view_contacts_restricted WHERE ((1)) ORDER BY display_nameCOLLATE LOCALIZED ASC
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2304)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.ActivityThread.access$700(ActivityThread.java:165)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.os.Looper.loop(Looper.java:137)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.ActivityThread.main(ActivityThread.java:5450)
01-02 12:28:44.037: E/AndroidRuntime(8074): at java.lang.reflect.Method.invokeNative(Native Method)
01-02 12:28:44.037: E/AndroidRuntime(8074): at java.lang.reflect.Method.invoke(Method.java:525)
01-02 12:28:44.037: E/AndroidRuntime(8074): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
01-02 12:28:44.037: E/AndroidRuntime(8074): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
01-02 12:28:44.037: E/AndroidRuntime(8074): at dalvik.system.NativeStart.main(Native Method)
01-02 12:28:44.037: E/AndroidRuntime(8074): Caused by: android.database.sqlite.SQLiteException: near "LOCALIZED": syntax error (code 1): , while compiling: SELECT _id, display_name FROM view_contacts_restricted WHERE ((1)) ORDER BY display_nameCOLLATE LOCALIZED ASC
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:181)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.content.ContentProviderProxy.query(ContentProviderNative.java:385)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.content.ContentResolver.query(ContentResolver.java:417)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.content.ContentResolver.query(ContentResolver.java:360)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.Activity.managedQuery(Activity.java:1826)
01-02 12:28:44.037: E/AndroidRuntime(8074): at com.shoaiblalich.pinchme.Main.getContacts(Main.java:51)
01-02 12:28:44.037: E/AndroidRuntime(8074): at com.shoaiblalich.pinchme.Main.populateContactList(Main.java:30)
01-02 12:28:44.037: E/AndroidRuntime(8074): at com.shoaiblalich.pinchme.Main.onCreate(Main.java:22)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.Activity.performCreate(Activity.java:5369)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
01-02 12:28:44.037: E/AndroidRuntime(8074): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
01-02 12:28:44.037: E/AndroidRuntime(8074): ... 11 more
01-02 12:28:45.547: I/Process(8074): Sending signal. PID: 8074 SIG: 9
Я действительно жесткое время, пытаясь получить контакты в ListView. Если мой вопрос слишком запутан, может ли кто-нибудь показать мне, как это делать с нуля?