我在google和stackoverflow上看了很多,最后写了一些代码,我认为应该按预期将联系人放到listview中。但我总是得到这个错误。谁能帮我 ?
这是我的主要课程:
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
我真的很难将联系人放到列表视图中。如果我的问题太混乱,有人可以告诉我如何从头开始这样做吗?
答案 0 :(得分:0)
由于错误非常明显是语法错误,display_name
中的ORDER BY display_nameCOLLATE LOCALIZED ASC
后空格丢失了
替换如下
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";