1

データベース内の情報をチェックして画面に表示するクラスを実行しようとしています。2番目のテーブルの情報をチェックするためのコードを追加するまで、昨日は機能していました。なぜこれが起こっているのかわからないので、コードとlogcatの両方を投稿します

public class WorkoutProgress extends ListActivity {

  private DataBaseHelper datasource;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    /*requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);*/
    super.onCreate(savedInstanceState);
    setContentView(R.layout.progress);

    datasource = new DataBaseHelper(this);
    datasource.open();
    fillData();
    datasource.close();
  }
  private void fillData() {
    // Get all of the notes from the database and create the item list
    Cursor c = datasource.getAllTitles();
    startManagingCursor(c);

    String[] from = new String[] {DataBaseHelper.KEY_CODE,  DataBaseHelper.KEY_DAYS,DataBaseHelper.KEY_BMI };
    int[] to = { R.id.code, R.id.Days, R.id.BMI };
    String[] from2 = new String[] {DataBaseHelper.KEY_DATE,  DataBaseHelper.KEY_STEPS,DataBaseHelper.KEY_CALs };
    int[] to2 = { R.id.date, R.id.steps, R.id.cals };
    // Now create an array adapter and set it to display using our row
    SimpleCursorAdapter notes =
     new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
    setListAdapter(notes);
    SimpleCursorAdapter notes2 =
      new SimpleCursorAdapter(this, R.layout.notes_row, c, from2, to2);
    setListAdapter(notes);
  }

  public void add(View view) {
    //Do nothing
  }

  public void delete(View view) {
     datasource.open();
     datasource.deleteFirst();
     fillData();
     datasource.close();
  }
}

このクラスにアクセスしようとしたときのログ猫は

04-06 01:10:42.293: E/global(22219): java.lang.UnsupportedOperationException
04-06 01:10:42.293: E/global(22219):    at java.lang.VMThread.stop(VMThread.java:85)
04-06 01:10:42.293: E/global(22219):    at java.lang.Thread.stop(Thread.java:1391)
04-06 01:10:42.293: E/global(22219):    at java.lang.Thread.stop(Thread.java:1356)
04-06 01:10:42.293: E/global(22219):    at com.b00348312.workout.Splashscreen$1.run(Splashscreen.java:42)
04-06 01:10:45.393: I/Database(22219): sqlite returned: error code = 1, msg = AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
04-06 01:10:45.393: E/Database(22219): Failure 1 (AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY) on 0x2c0e38 when preparing 'create table goals (_id primary key autoincrement, code text not null,days title text not null, bmi text not null);'.
04-06 01:10:45.403: D/AndroidRuntime(22219): Shutting down VM
04-06 01:10:45.403: W/dalvikvm(22219): threadid=1: thread exiting with uncaught exception (group=0x400259f8)
04-06 01:10:45.453: D/dalvikvm(22219): GC_FOR_MALLOC freed 4012 objects / 253248 bytes in 32ms
04-06 01:10:45.453: E/AndroidRuntime(22219): FATAL EXCEPTION: main
04-06 01:10:45.453: E/AndroidRuntime(22219): java.lang.RuntimeException: Unable to start  activity ComponentInfo{com.b00348312.workout/com.b00348312.workout.WorkoutProgress}: android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY: create table goals (_id primary key autoincrement, code text not null,days title text not null, bmi text not null);
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.app.ActivityThread.access$2300(ActivityThread.java:135)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.os.Looper.loop(Looper.java:144)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.app.ActivityThread.main(ActivityThread.java:4937)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at java.lang.reflect.Method.invokeNative(Native Method)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at java.lang.reflect.Method.invoke(Method.java:521)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at dalvik.system.NativeStart.main(Native Method)
04-06 01:10:45.453: E/AndroidRuntime(22219): Caused by: android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY: create table goals (_id primary key autoincrement, code text not null,days title text not null, bmi text not null);
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1817)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at com.b00348312.workout.DataBaseHelper$DatabaseHelper.onCreate(DataBaseHelper.java:59)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at com.b00348312.workout.DataBaseHelper.open(DataBaseHelper.java:78)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at com.b00348312.workout.WorkoutProgress.onCreate(WorkoutProgress.java:21)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
04-06 01:10:45.453: E/AndroidRuntime(22219):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
04-06 01:10:45.453: E/AndroidRuntime(22219):    ... 11 more
4

3 に答える 3

3

スタック トレースには次のように記載されています。

失敗 1 (AUTOINCREMENT は INTEGER PRIMARY KEY でのみ許可される) 0x2c0e38 で、「テーブルの目標を作成する (_id 主キーの自動インクリメント、コード テキストが null でない、days タイトル テキストが null でない、bmi テキストが null でない);」。

ステートメントで_idフィールドを として宣言するのを忘れたようです。INTEGERcreate table

于 2012-04-06T00:22:36.713 に答える
0

_IDデータベースの作成時に、DataBaseHelper が列のタイプを指定していない可能性があります。として定義する必要がありますINTEGER

于 2012-04-06T00:25:41.413 に答える
0

Android プログラミングを始めたばかりで、USB デバッグを使用してアプリを試しています。SQL のエラーが発生した可能性があるため、次にデータベースを実行したときにデータベースがデバイスから消去されず、行った変更が有効にならないことに気付きました。

したがって、「テーブルの作成」SQL ステートメントが何らかの形で間違っていたとします。プログラムがクラッシュします。問題を見つけて修正します。プログラムを再度実行すると、バージョンを上げない限り、同じ古いデータベースが使用されます。

そのため、デバイスに移動してプログラムをアンインストールし、コンピューターから再度実行してください。今回は、新しい「テーブルの作成」SQLを使用して、データベースが最初から作成されると思います。

私は新しいので、これは起こっていることではないかもしれません。

于 2012-04-26T20:12:02.663 に答える