2011-12-31 16 views
0

SQLite dbに入れた情報を回復しようとすると問題が発生します。私はそれが置かれた成功のメッセージを得るが、私がクラッシュするデータを引き出す私の活動を開始するとき。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はそれ

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; 
    } 
ため

<?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をretrive

これがなぜエラーになっているのか誰でも知っていますか?

+0

データを取得するヘルパーコードは何ですか? –

+0

元の投稿に追加しました。ありがとう! – Intelwalk

答えて

1

OK、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件の結果を探しています。

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; 
} 
を試してみてください_id列を追加してください

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

rDataの機能は何ですか?それに割り当てられたものがない。説明できますか?ありがとう – Intelwalk

+0

String [] rData = {iRow、iDate、Itime、iHair、iCom}; 5つの列を取得し、それらを文字列配列に格納します。笑、変数名を変更するのを忘れた –

+0

@BillGaryはその仕事をしますか? int iRow = c.getString(0); int値のString []を作成しています。 –

関連する問題