Неверный запрос на слот поля в SQLite - PullRequest
0 голосов
/ 31 декабря 2011

У меня проблема, когда я пытаюсь восстановить информацию, которую я поместил в базу данных 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;
    }

Кто-нибудь знает, почему происходит ошибка?

1 Ответ

1 голос
/ 31 декабря 2011

хорошо, попробуйте

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);
    if (c != null && c.moveToFirst()) {
    int iRow = c.getString(0);
    int iDate = c.getString(1);
    int iTime = c.getString(2);
    int iHair = c.getString(3);
    int iCom = c.getString(4);

    String[] rData = { iRow, iDate, iTime, iHair, iCom };

    return rData;

    }

    return null;
}

EDIT

String[] columns = new String[] { KEY_BATHDATE, KEY_BATHTIME,
            KEY_HAIRWASH, KEY_COMMENTS };

- это 4 результата, но

    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);

ищет 5 результатов. добавьте свой _id столбец

String[] columns = new String[] { KEY_ROWID, KEY_BATHDATE, KEY_BATHTIME,
            KEY_HAIRWASH, KEY_COMMENTS };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...