2017-11-10 9 views
0

エミュレータでセカンダリEXTERNALストレージを使用することになります。ユーザーは外部ストレージまたは内部ストレージを選択できます。 Android build 26.0.2 YESマニフェストには権限があります。このコード行がランチャーアクティビティに含まれている場合、ストレージはデフォルトでINTERNAL helper = new DBHelper(this)になります。 ヘルパーは静的であると宣言されています。このコード行を使用する大きな利点は、アプリケーションが停止したとき、またはエミュレータでClear Allを使用してアプリケーションを終了したときに、RecyclerAdapterによってサポートされているArrayListのバインドされたデータが保持されることです。したがって、アクティビティで必要な場合を除いてヘルパー宣言を使用しないと、データベースからデータをリロードしてArrayListに移入する必要が生じます。これが私たちが失われた場所です。 ArrayListをロードするDBhelperのメソッドを呼び出そうとしました。以下の無駄なコードはListActivityにあります。アプリは、閉じられた後は常にMainActivityに戻ります。だから問題はどこでどのように私はデータベースからArrayListを再生成するコードを配置するのですか?ヘルパー宣言によって外部ストレージが保護されない

}// End of onCreate Bundle 

@Override 
protected void onResume() { 
    super.onResume(); 
    helper = new DBHelper(this); 
    dbList = new ArrayList<>(); 
    dbList = helper.getDataFromDB(); 
} 

答えて

1

私はこれをテストしようとしましたが、あなたは、コード ヘルパー=新しいDBHelper(本)の行を必要としないことを発見しました。問題はあなたのMainActivityのどこかであなたのコードがDBHelperに渡っています。その前に変数THE_PATHが設定されています。私のテストでは、そのトリップが行われる前にDBHelperに渡される変数THE_PATHの内容を確立する必要があることがわかりました。テスト中は、config.iniを変更してSDカードをエミュレータから除外し、Androidは内部ストレージを使用するだけでした。 今のところ私のテストではユーザーがストレージの種類を選択できませんでした。 DBが内部メモリのストレージ容量を超えている場合は、デフォルトをEXTERNALストレージに設定するだけです。あなたが知っているように、SDカードではデータが実際には安全ではありません

+0

データがSDカードに保存された後にSDカードが利用できない場合はどうなりますか? –

+0

@James_Duh AndroidはデフォルトでINTERNALストレージまたは最適なデザインでは、以前にEXTERNALストレージを使用していたことをユーザーに知らせて、その値をtxtファイルのどこかに格納するか、データベースに格納します – Grendel

関連する問題