ユーザーがいくつかのテキストフィールドに数値情報を入力するアプリを開発しています。アプリは、後で使用するために情報を txt ファイルに書き込むことになっています。ユーザーが必要に応じて数値を変更できるように、数値をファイルから読み取り、同じテキスト フィールドにロードする必要があります。「ライター」機能と「ローダー」機能の両方が機能しているように見えますが、問題は、「ローダー」が呼び出されるたびに、「ライター」によって現在作成されているファイルではなく、以前に保存されたファイルからデータをロードすることです。 "。ユーザーが新しく保存したデータをテキスト フィールドにロードする場合は、アプリを閉じて再度開く必要があります。状況をよりよく説明するために、コードの後にいくつかのシナリオを配置しました。何が間違っていて、何ができるのでしょうか?
情報をファイルに入れるために使用しているコードは次のとおりです。正常に動作します。
public void writer(View view){
try {
FileOutputStream fos = openFileOutput("myfilename", Context.MODE_WORLD_WRITEABLE | Context.MODE_WORLD_READABLE);
PrintStream prntst = new PrintStream(fos);
txtEditor=(EditText)findViewById(R.id.editText1);
prntst.println (txtEditor.getText().toString());
txtEditor=(EditText)findViewById(R.id.EditText02);
prntst.println (txtEditor.getText().toString());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
そして、これがファイルからいくつかのArrayListに情報を読み取るために使用しているコードです。次に、このArrayListを使用してテキストフィールドを埋めます。これも正常に機能しています(エラーなしでうまくいくことを意味します):
public void reader(View view){
try {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(openFileInput("myfilename")));
Scanner scanner = new Scanner(inputReader);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
bld.add(line);
}
inputReader.close();
scanner.close();
txtEditor=(EditText)findViewById(R.id.editText1);
txtEditor.setText(bld.get(0));
txtEditor=(EditText)findViewById(R.id.EditText02);
txtEditor.setText(bld.get(1));
} catch (IOException e) {
e.printStackTrace();
txtEditor=(EditText)findViewById(R.id.editText1);
bld.add((txtEditor.getText().toString()));
txtEditor=(EditText)findViewById(R.id.EditText02);
bld.add((txtEditor.getText().toString()));
}
}
シナリオ:
- ユーザーがアプリを開き、テキスト フィールド (2 つのテキスト フィールド) にいくつかの既定値があり、ユーザーは値をそれぞれ 2 と 3 に変更し、保存ボタンをタッチします。
- ユーザーは値を再度変更しますが、保存ボタンに触れる代わりにロード ボタンを押すと、アプリは 2 と 3 をフィールド (保存されている) にロードすることになっていますが、代わりにデフォルト値をロードします。
- ユーザーがアプリを閉じて再度開くと、今回は 2 と 3 がテキストフィールドのデフォルトとして表示されます。「ローダー」が以前に保存されたファイルからデータを読み取っているようです。
- ユーザーは値を「2 と 3」から「13 と 14」に変更し、それぞれ保存ボタンと読み込みボタンを押しますが、2 と 3 はフィールドに読み込まれます。
- ユーザーがアプリを閉じて再度開くと、今回は 13 と 14 が表示されます。
PS。変数 bld はグローバルであり、MainActivity で定義されています。
ArrayList<String> bld = new ArrayList<String>();
ありがとうございました、