应用程序崩溃 - 扩展CursorAdapter

时间:2012-02-09 11:52:10

标签: android

使用我的第一个Android应用并面临挑战。 我从CallLog contentprovider拉取调用并使用游标适配器显示。 我已经覆盖了bindView和newView。我没有使用SimpleCursorAdapter,因为我需要格式化日期。我是Android新手,因此容易出现愚蠢的错误。 :) 我使用此代码在主Activity中调用此cursorAdapter。

startManagingCursor(calls);
adapter = new CallsAdapter(this, calls);
setListAdapter(adapter);

public void bindView(View view, Context context, Cursor cursor) {
    displayDate(view, date);
}

private void displayDate(View view, String strDate) {
    final long timestamp = Long.parseLong(strDate);
    final String formattedDate = DATEFORMAT.format(new Date(timestamp));
    final TextView t = (TextView) view.findViewById(R.id.date_text);
    t.setText(formattedDate);
}

public View newView(Context context, Cursor cursor, ViewGroup parent) {
    final View view = LayoutInflater.from(context).inflate(R.layout.scratch_layout2, parent, false);
    return view;
}

但我的应用程序在启动之前崩溃了。

已编辑 - 显示错误日志。

ERROR/AndroidRuntime(12885): Uncaught handler: thread main exiting due to uncaught exception
02-09 06:05:28.281: ERROR/AndroidRuntime(12885): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.amannain.android.missedcalls/com.amannain.android.missedcalls.MissedCallsActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 6
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.app.ActivityThread.access$1800(ActivityThread.java:112)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.os.Looper.loop(Looper.java:123)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.app.ActivityThread.main(ActivityThread.java:3948)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at java.lang.reflect.Method.invokeNative(Native Method)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at java.lang.reflect.Method.invoke(Method.java:521)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at dalvik.system.NativeStart.main(Native Method)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 6
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:172)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.database.CursorWrapper.getString(CursorWrapper.java:135)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at com.amannain.android.missedcalls.MissedCallsAdapter.<init>(MissedCallsAdapter.java:24)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at com.amannain.android.missedcalls.MissedCallsActivity.onCreate(MissedCallsActivity.java:27)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
02-09 06:05:28.281: ERROR/AndroidRuntime(12885):     ... 11 more

此致 阿曼

1 个答案:

答案 0 :(得分:0)

在你的MissedCallsAdapter中,你似乎在适配器真正初始化之前很久就在构造函数中调用了光标

Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 6
at android.database.CursorWrapper.getString(CursorWrapper.java:135) 
at com.amannain.android.missedcalls.MissedCallsAdapter.<init>(MissedCallsAdapter.java:24)
at com.amannain.android.missedcalls.MissedCallsActivity.onCreate(MissedCallsActivity.java:27)

检查适配器代码的第24行。或者更确切地说是第27行,其中对构造函数的调用发生在onCreate