android:麻烦用联系人填充listview

时间:2014-01-02 07:03:00

标签: android listview logcat

我在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

我真的很难将联系人放到列表视图中。如果我的问题太混乱,有人可以告诉我如何从头开始这样做吗?

1 个答案:

答案 0 :(得分:0)

由于错误非常明显是语法错误,display_name中的ORDER BY display_nameCOLLATE LOCALIZED ASC后空格丢失了

替换如下

String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";