访问Galaxy设备上的呼叫日志:SQLiteException:没有这样的列:Calls._ID

时间:2013-12-27 15:15:29

标签: android

我在Samsung Galaxy设备上遇到问题。

我的应用程序正试图通过电话长时间访问该电话。

它在大多数设备上运行良好,但三星Galaxy设备没有,任何人都知道如何解决问题?

    android.database.sqlite.SQLiteException: no such column: Calls._ID (code 1): , 
    while compiling: SELECT _id, number, date, duration, type FROM logs WHERE 
    (logs.logtype=100 OR logs.logtype=110 OR logs.logtype=900 OR logs.logtype=500 OR
    logs.logtype=800 OR logs.logtype=120 OR logs.logtype=510 OR logs.logtype=1000 OR
    (logs.logtype=200 AND number NOT IN (SELECT number FROM logs WHERE number LIKE 
    '%@%')) OR logs.logtype=300) AND ((((type != 4)) AND (logtype=100 OR logtype=500))) 
    ORDER BY Calls._ID DESC
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:184)
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
    at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
    at android.content.ContentResolver.query(ContentResolver.java:372)
    at android.content.ContentResolver.query(ContentResolver.java:315)
    at com.example.minutes.MainActivity.onCreateOptionsMenu(MainActivity.java:140)
    at android.app.Activity.onCreatePanelMenu(Activity.java:2571)
    at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:455)
    at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:829)
    at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:3192)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4921)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
    at dalvik.system.NativeStart.main(Native Method)

以下是我用来访问通话记录的代码

     String columns[]=new String[] {
             CallLog.Calls._ID, 
             CallLog.Calls.NUMBER, 
             CallLog.Calls.DATE, 
             CallLog.Calls.DURATION, 
             CallLog.Calls.TYPE};
     Cursor c;
    c = getContentResolver().query(Uri.parse("content://call_log/calls"),
                   columns, null, null, "Calls._ID DESC");

2 个答案:

答案 0 :(得分:1)

虽然您的代码段不完整,但我假设您正在尝试从游标中获取列。即使列名称正确,您也会遇到异常。请确保两件事: 1. Cursor.getCount()> 0 2.如果满足以上条件,则移至第一个记录,即Cursor.moveToFirst();

这必须解决你的问题。

答案 1 :(得分:0)

尝试ORDER BY“_id DESC”,而不是ORDER BY Calls._ID DESC。我对套件kat 4.4.2也有同样的问题。没有在其他版本上测试过,但它应该适用于所有版本。