0

SQLiteHelperを使用してローカルデータベースからデータを入力したときにRecyclerViewが正常に動作しましたが、SQLiteAssetHelperを使用して資産フォルダにある外部データベースを使用してデータを入力しますこれはGithub SQLiteAssetHelper exampleですが、SimpleCursorAdapter()メソッドは互換性のあるListViewだと思いますが、RecyclerViewではなく、「互換性のないタイプ」のIDEエラーが発生します。SQLiteAssetHelperを使用してRecyclerViewにデータを入力する

これを回避する方法、またはRecyclerViewをListViewに変換する必要がありますか?ヘルプは非常に高く評価されます。

public class DisplayActivity extends AppCompatActivity { 

    DataSource mDataSource; 
    List<Facility> facilityList = DataProvider.facilityList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     mDataSource = new DataSource(this); 
     mDataSource.open();        // Open database 
     mDataSource.seedDatabase(facilityList); 

     List<Facility> listFromDB = mDataSource.getAllItems(); 
     FacilitiesAdapter adapter = new FacilitiesAdapter(this, listFromDB); 
     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.displayActivityRecyclerView); 
     recyclerView.setAdapter(adapter); 

    } // End of onCreate() 


    @Override 
    protected void onPause() { 
     super.onPause(); 
     mDataSource.close();      // Close database connection when application is 
    }            // paused to prevent database leaks. 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mDataSource.open();       // Open database connection when application is resumed 
    } 
} 

SQLiteHelperクラス:

public class DBHelper extends SQLiteOpenHelper { 

    public static final String DB_FILE_NAME = "health.db"; 
    public static final int DB_VERSION = 1; 

    public DBHelper(Context context) { 
     super(context, DB_FILE_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(FacilitiesTable.SQL_CREATE);   // Execute SQL_CREATE statement; 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL(FacilitiesTable.SQL_DELETE);   // delete old database 
     onCreate(db);         // Create new database 
    } 
} 
+1

"私のRecyclerViewは、SQLiteHelperを使用してローカルデータベースからデータを入力したときに正常に動作していました" - そこでは 'SimpleCursorAdapter'を使用していませんでした。それで、 "うまくいきました"ならば、そのコードにスティックして 'SQLiteAsHelper'を' SQLiteOpenHelper'に置き換えてください。それ以外の場合は、 'Cursor'をデータソースとして使用する独自の' RecyclerView.Adapter'を作成してください。 – CommonsWare

+0

@CommonsWareもう一度返信いただきありがとうございます:)しかし、私は外部データベースを使用するか、何らかの形でデータベースファイルを/ data/data/package/databasesフォルダにコピーする必要があります。 – aatj

+0

あなたの質問を編集し、 "SQLiteHelperを使用してローカルデータベースからデータを入力して正常に動作しています"というコードを表示してください。 – CommonsWare

答えて

2

SQLiteAssetHelperは、SQLiteOpenHelperのプラグアンドプレイの代替品です。SQLiteAssetHelper自体はSQLiteOpenHelperです。だから、

、すべてを行う必要があり、SQLiteOpenHelperのサブクラスで動作するコードを与えられた:リモートonCreate()onUpgrade()方法

SQLiteAssetHelper

  • を拡張するためにサブクラス化

    • 変更

    • 必要に応じて、スーパークラスコンストラクタの呼び出しを調整します。

    assets/the documentationにデータベースをパッケージしてください。

    SQLiteOpenHelperを拡張したときに機能していたコードは、SQLiteAssetHelperに拡張されています。

  • -1

    あなたは、このメソッドを使用して、 "デフォルト" の場所に資産フォルダからデータベースをコピーすることができます。

    public final String path = "/data/data/YourPackageName/databases/"; 
        public final String Name = "DataBaseName.db"; 
    
        public void copydatabase() throws IOException { 
    
         OutputStream myOutput = new FileOutputStream(path + Name); 
         byte[] buffer = new byte[1024]; 
         int length; 
         InputStream myInput = getApplicationContext().getAssets().open("DataBaseName.db"); 
         while ((length = myInput.read(buffer)) > 0) { 
          myOutput.write(buffer, 0, length); 
         } 
         myInput.close(); 
         myOutput.flush(); 
         myOutput.close(); 
    
        } 
    

    だけ呼び出したより:

    copydatabase() 
    

    と試してサラウンド/キャッチ。

    関連する問題