2016-11-08 10 views
0

メモリ内に作成されたデータベースを使用してコンテンツプロバイダからカーソルを取得することができます。私の活動では、どのように私は次のように私は、メモリ内のデータベースを作成

@Override 
    public Cursor query(Uri uri, String[] projection, String selection, 
         String[] selectionArgs, String sortOrder) { 
     final SQLiteDatabase db = myDb.getReadableDatabase(); 
     Cursor retCursor; 
     switch (sUriMatcher.match(uri)) { 
      case LABEL: 
       retCursor = db.query(
         IOContract.IoEntry.TABLE_NAME, 
         projection, 
         selection, 
         selectionArgs, 
         null, 
         null, 
         sortOrder 
       ); 
       break; 

      default: 
       throw new UnsupportedOperationException("Unknown uri: " + uri); 
     } 

カーソルは次のとおりです。

Cursor c = contentResolver.query(cpUri, null, selection, argms, null); 

DATABASE_NAMEを使用してデータベースを作成すると、データベースがディスク上に作成され、カーソルが戻されます。

 public DbIoDatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
//  super(context, null, null, DATABASE_VERSION); 
     this.myContext = context.getApplicationContext(); 
    } 

私はnullを使用してメモリにそれを作成するとき、私はカーソル内のどの要素を取得していない - 返されたカーソルがnullではないですが。

public DbIoDatabaseHelper(Context context) { 
//  super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     super(context, null, null, DATABASE_VERSION); 
     this.myContext = context.getApplicationContext(); 
    } 

データベースをメモリ内に作成されたとき、私は有効なカーソルを取得することができますし、私はそれをどのように行うことができます方法はありますか? ご協力いただければ幸いです。ありがとうございました。

+0

データベースにデータを追加しましたか?データベースがメモリ内にあるときは、アプリケーションの実行間にデータを保存しません。つまり、データを追加する前のクエリは空になります。 – XGouchet

答えて

0

ありがとうございました。あなたの答えはXGouchetです。私は次のようにして問題を解決しました。メモリ内に作成されたデータベースは、作成したアクティビティにしか表示されないということを読んでいました。したがって、私はOnCreate()メソッドでコンテンツプロバイダにデータベースを作成しました。

@Override 
    public boolean onCreate() { 
     myDbData = new DatabaseData(); 
     myDb = new IODatabaseHelper(getContext()); 
     initializeDb(); // method that populates the database 
     if (myDb == null) { 
      ret = false; 
     } 
     return true; 
    } 
関連する問題