У меня проблема, когда я пытаюсь восстановить информацию, которую я поместил в базу данных SQLite.Я получаю сообщение об успехе, которое было вставлено, но когда я начинаю свою деятельность, которая извлекает данные, происходит сбой.
LogCat
12-30 22:14:13.005: D/dalvikvm(275): GC_EXTERNAL_ALLOC freed 734 objects / 54696 bytes in 92ms
12-30 22:19:00.275: W/KeyCharacterMap(275): No keyboard for id 0
12-30 22:19:00.275: W/KeyCharacterMap(275): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
12-30 22:19:11.185: D/dalvikvm(275): GC_FOR_MALLOC freed 7425 objects / 301256 bytes in 70ms
12-30 22:19:11.257: E/CursorWindow(275): Bad request for field slot 0,-1. numRows = 8, numColumns = 4
12-30 22:19:11.265: D/AndroidRuntime(275): Shutting down VM
12-30 22:19:11.265: W/dalvikvm(275): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-30 22:19:11.285: E/AndroidRuntime(275): FATAL EXCEPTION: main
12-30 22:19:11.285: E/AndroidRuntime(275): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.walkarc.babytracker/com.walkarc.babytracker.BathReport}: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
12-30 22:19:11.285: E/AndroidRuntime(275): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.os.Handler.dispatchMessage(Handler.java:99)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.os.Looper.loop(Looper.java:123)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-30 22:19:11.285: E/AndroidRuntime(275): at java.lang.reflect.Method.invokeNative(Native Method)
12-30 22:19:11.285: E/AndroidRuntime(275): at java.lang.reflect.Method.invoke(Method.java:521)
12-30 22:19:11.285: E/AndroidRuntime(275): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-30 22:19:11.285: E/AndroidRuntime(275): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-30 22:19:11.285: E/AndroidRuntime(275): at dalvik.system.NativeStart.main(Native Method)
12-30 22:19:11.285: E/AndroidRuntime(275): Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
12-30 22:19:11.285: E/AndroidRuntime(275): at android.database.CursorWindow.getString_native(Native Method)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.database.CursorWindow.getString(CursorWindow.java:329)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
12-30 22:19:11.285: E/AndroidRuntime(275): at com.walkarc.babytracker.MyDBAdapter.getData(MyDBAdapter.java:91)
12-30 22:19:11.285: E/AndroidRuntime(275): at com.walkarc.babytracker.BathReport.onCreate(BathReport.java:17)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-30 22:19:11.285: E/AndroidRuntime(275): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
Мой код входа
public long createEntry(String date, String time, String hairWash,
String comment) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(KEY_BATHDATE, date);
cv.put(KEY_BATHTIME, time);
cv.put(KEY_HAIRWASH, hairWash);
cv.put(KEY_COMMENTS, comment);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}
мой вид xml активности db retrive
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableRow >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="Date" />
<TextView
android:id="@+id/textView2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="Time" />
<TextView
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="Hair Wash?" />
<TextView
android:id="@+id/textView4"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="Comments" />
"
</TableRow>
<TextView
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="get info from db" />
</TableLayout>
</LinearLayout>
Java для него
public class BathReport extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.bathreport);
TextView tv = (TextView) findViewById(R.id.textView3);
MyDBAdapter info = new MyDBAdapter(this);
info.open();
String data = info.getData();
info.close();
tv.setText(data);
}
public String getData() {
String[] columns = new String[] { KEY_BATHDATE, KEY_BATHTIME,
KEY_HAIRWASH, KEY_COMMENTS };
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null,
null, null);
String result = "";
int iRow = c.getColumnIndex(KEY_ROWID);
int iDate = c.getColumnIndex(KEY_BATHDATE);
int iTime = c.getColumnIndex(KEY_BATHTIME);
int iHair = c.getColumnIndex(KEY_HAIRWASH);
int iCom = c.getColumnIndex(KEY_COMMENTS);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
result = result + c.getString(iRow) + " " + c.getString(iDate)
+ " " + c.getString(iTime) + " " + c.getString(iHair) + " "
+ c.getString(iCom) + "\n";
}
return result;
}
Кто-нибудь знает, почему происходит ошибка?