0

戻るボタンを押すたびにアプリが呼び出さonSaveInstanceState()れず、データを保存できません。スケジューラーアプリを作ろうとしていますが、戻るボタンを押しても設定済みのスケジュールを保存する必要があります。ソース ファイルから新しいデータを stringArray に追加して、ListView を動的に編集したいと考えています。私が抱えている問題は、ファイルの schedules.txt が保存されていないことです。プログラムが新しいアクティビティを開くたびに、ファイルは空白になります。

これは私がこれまでに持っているコードです:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_schedules);
    ListView listview = (ListView) findViewById(R.id.scheduleListView);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, schedulesList); 
    listview.setAdapter(adapter);
    Log.v("myapp", "currentlist of files associated with this program are: " + fileList());

    try {

        FileOutputStream fout = openFileOutput("schedules.txt", MODE_PRIVATE);
        Log.v("myapp", "FileOutputStream ran");

    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

try {
       Log.v("myapp", "first get old schedules call");
       getOldSchedules();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}


public void editFile(String format) throws IOException {

    Log.v("myapp", "editFile ran");
    FileOutputStream fout = openFileOutput("schedules.txt", MODE_PRIVATE);
    OutputStreamWriter writer = new OutputStreamWriter(fout);

    writer.write("hello alex");
    writer.flush();
    writer.close();
    Log.v("myapp", "secondary getoldschedules call");
    getOldSchedules();
}

public void getOldSchedules() throws IOException{

    FileInputStream fis = openFileInput("schedules.txt");
    InputStreamReader reader = new InputStreamReader(fis);

    char[] inputbuffer = new char[32];
    reader.read(inputbuffer);
    String data = new String(inputbuffer);
    Log.v("myapp", "data in file reads: " + data);

    reader.close();


}
4

2 に答える 2

2

これは、Android 開発者サイトのデータ ストレージ オプションのガイドです。知っておく必要があるすべての情報が記載されています: http://developer.android.com/guide/topics/data/data-storage.html

于 2012-09-30T23:14:17.560 に答える
2

私の知る限り、保存コードにすぐに問題はありません。呼び出されない理由onSaveInstanceStateは、この場合のジョブには不適切なツールだからです。このメソッドは、Activity が元に戻す目的でシステムによって強制終了された場合にのみ呼び出されます。Androidのドキュメントから:

このメソッドではなく onPause() と onStop() が呼び出される例の 1 つは、ユーザーがアクティビティ B からアクティビティ A に戻る場合です。特定のインスタンスが復元されることはないため、B で onSaveInstanceState(Bundle) を呼び出す必要はありません。であるため、システムはそれを呼び出さないようにします。

戻るボタンを使用してアクティビティから移動することは、上記のシナリオの例です。アクティビティは破棄されているため、後で回復するために状態を保存する必要はありません。onSaveInstanceState永続的なデータストレージではなく、どのチェックボックスにチェックが入っているか、フィールドに入力されたテキストなど、小さな UI 用に設計されています。保存呼び出しをonPause(迅速な場合) 、onStop、またはに配置することを検討する必要がありonDestroyます。

于 2012-09-30T23:15:37.123 に答える