0

うわー、内部メモリへのロードと保存に関連する問題がいくつあるか信じられません。アプリに関連する保護された領域にしか保存できないことがわかりました。その領域にディレクトリを作成することさえできるかどうかはわかりません。私がマスターしたSDに保存しますが、要件は、使用可能なsdcardがないか、削除された場合でも、アプリがユーザー設定をロードして保存できることです。私は120の異なるデータ項目を持っているので、共有された設定は方法ではありません。キャッシュは永続的ではありません。

私は現在方法として持っています:

public static void SaveUserPrefs()
{
 try
{
 //FileOutputStream fos = openFileOutput("userPrefs.dat", Context.MODE_PRIVATE);
 FileOutputStream fos = new FileOutputStream( "userPrefs.dat"); 
 BufferedOutputStream bos = new BufferedOutputStream(fos); //to get a buffered stream  
 ObjectOutputStream oos = new ObjectOutputStream(bos);
 oos.writeFloat(versionNumber);
 oos.writeInt(autoWifiStart);
 oos.writeInt(autoAirPlane);
 ... many more items and file close

/userPrefs.datを除いてファイルが見つかりません読み取り専用ファイルシステム同じコードが外部または内部で機能すると思いますが、機能しません。コメントアウトコードも試してみましたが、同じ結果になりました。このデータをどこにどのように保存しますか?そして、それをロードするために何か別のことをする必要がありますか?save_external_Storageに設定された権限があります。

4

1 に答える 1

1

アプリに関連する保護された領域にしか保存できないことがわかりました。

内部ストレージでは、これは正しいです。

その領域にディレクトリを作成することさえできるかどうかはわかりません。

内部ストレージ上のアプリケーションの領域を指すオブジェクトgetFilesDir()を取得し、そのオブジェクトを呼び出してサブディレクトリを作成するために使用します。後者は標準のJavaファイルI/Oです。Filemkdirs()File

私は120の異なるデータ項目を持っているので、共有された設定は方法ではありません。

のアイテム数に特に制限はありませんSharedPreferencesSharedPreferencesXMLファイルに保存されます。

/userPrefs.datを除いてファイルが見つかりません読み取り専用ファイルシステム

無効なパスを指定しました。を使用して、内部ストレージ上のアプリケーションの領域を指すオブジェクトgetFilesDir()を取得してから、適切なコンストラクターを使用して、内部ストレージ上の特定のファイルを指すオブジェクトを作成します。後者のオブジェクトをコンストラクターで使用します。繰り返しになりますが、これは標準のJavaファイルI/Oです。FileFileFileFileFileOutputStreamgetFilesDir()

同じコードが外部または内部のどちらでも機能すると思いますが、機能しません

指定したパスが外部ストレージ上にないため、このコードは外部ストレージでも機能しません。

このデータをどこにどのように保存しますか?

個人的には、私は決して使用しませんObjectOutputStream。120アイテムの場合、私は間違いなくSQLiteデータベースを検討します。そうでない場合は、データをJSONまたはXMLにシリアル化します。これらのオプションはどれもObjectOutputStream、IMHOよりもデバッグが簡単です。

そして、それをロードするために何か別のことをする必要がありますか?

標準のJavaファイルI/Oに従って、Fileあるタイプで使用するために、問題のファイルを指す適切なオブジェクトを作成する必要があります。InputStream

save_external_Storageに設定された権限があります。

WRITE_EXTERNAL_STORAGE内部ストレージへの書き込みには必要ありません。

于 2012-07-10T23:34:42.757 に答える