2016-12-08 27 views
0

json形式でサーバから取得されたデータ。フェッチされたデータはarraylistsに格納されます。 arraylistsはループされ、データベースに格納されます。データは取得され、配列リストに格納されます。配列リストは、それらを出力することで確認しました。何が奇妙なのinitメソッドでgetNumberOfEntriesメソッドを返す26 getNumberOfEntries私はinit()を呼び出した後呼び出す場合0を返します。Android sqliteデータベースにデータが挿入されていない

これは、これが呼び出されるinsertCourses方法である

private void init() 
{ 
    db  = dbHelper.getWritableDatabase(); 
    dbHelper.dropTable(db); 

    db = dbHelper.getWritableDatabase(); 
    dbHelper.createTable(db); 

    final SQLiteDatabase db; 
    final long   numEntries; 

    db = dbHelper.getWritableDatabase(); 
    numEntries = dbHelper.getNumberOfEntries(db); 
    if(numEntries == 0) 
    { 
     db.beginTransaction(); 

     try 
     { 
      for (int i=0; i < courseNameArrayList.size(); i++) 
      { 
       dbHelper.insertCourses(db, 
             courseTermArrayList.get(i), 
             courseNumberArrayList.get(i), 
             courseNameArrayList.get(i), 
             courseDescriptionArrayList.get(i)); 
      } 
     } 
     catch (Exception e) 
     { 
      Log.d(TAG, "init exception"); 
      Log.d(TAG, e.getMessage()); 
     } 
     finally 
     { 
      Log.d(TAG, "In Finally init"); 
      final long numEntries2 = dbHelper.getNumberOfEntries(db); 
      Log.d(TAG, "init finally num entries: " + numEntries2); // HERE IT LOGS AS 26 ENTRIES 
      db.endTransaction(); 
     } 
    } 
    db.close(); 
} 

のArrayListをループする方法です。私はこの問題は、このコードであると信じて

public void insertCourses(final SQLiteDatabase db, 
          final String   term, 
          final String   courseNumber, 
          final String   courseName, 
          final String   courseDescription) 
{ 
    Log.d(TAG, "Inserting Courses" + " " + term + " " + courseNumber + " " + courseName + 
      " " + courseDescription); 
    final ContentValues contentValues; 

    contentValues = new ContentValues(); 
    contentValues.put(COL_TERM, term); 
    contentValues.put(COL_COURSE_NUM, courseNumber); 
    contentValues.put(COL_COURSE_NAME, courseName); 
    contentValues.put(COL_COURSE_DESCRIPTION, courseDescription); 
    try 
    { 
     Log.d(TAG, "In insertCourses try"); 
     db.insertOrThrow(TABLE_NAME, null, contentValues); 

    } 
    catch (Exception e) 
    { 
     Log.d(TAG, "In insertCourses catch"); 

     String exception = e.getMessage(); 
     Log.d(TAG, exception); 
    } 

} 

getNumberOfEntries方法

public long getNumberOfEntries(final SQLiteDatabase db) 
{ 
    Log.d(TAG, "Get Number of Entries"); 
    final long numEntries; 

    numEntries = DatabaseUtils.queryNumEntries(db, TABLE_NAME); 
    return (numEntries); 
} 

表構造

private static final String  CREATE_COURSE_INFO_TABLE = "CREATE TABLE IF NOT EXISTS " + 
     TABLE_NAME     + " (" + 
     COL_ID      + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     COL_TERM     + " TEXT NOT NULL, " + 
     COL_COURSE_NUM    + " TEXT NOT NULL, " + 
     COL_COURSE_NAME    + " TEXT NOT NULL, " + 
     COL_COURSE_DESCRIPTION  + " TEXT NOT NULL)"; 
+0

logcatをお持ちでしたか?警告メッセージはあなたのエラーです –

+0

申し訳ありませんが、私は完全に理解していません。出力に警告があるかどうか尋ねていますか?いいえ、私には何の警告もありませんでした。 – noname

答えて

1

二回目は、トランザクションがロールバックされているため、0を返し、その後、行はありません挿入された。

このパターンを使用してください。

関連する問題