Сохранить / получить список даже после перезагрузки Android - PullRequest
0 голосов
/ 27 июля 2011

Я сохраняю и записываю ArrayList, используя следующий код в файл. Этот метод работает для поддержания списка только тогда, когда приложение является фоновым (onStop (), я полагаю), но когда я перезагружаю телефон, мой список теряется:

@SuppressWarnings("unchecked")
private ArrayList<HashMap<String, String>> loadListFromFile(
        ArrayList<HashMap<String, String>> masterlistrev) {

    try {
        FileInputStream fis = openFileInput(serfilename);
        ObjectInputStream ois = new ObjectInputStream(fis);
        masterlistrev = (ArrayList<HashMap<String, String>>) ois
                .readObject();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return masterlistrev;
}

private void writeListToFile(
        ArrayList<HashMap<String, String>> masterlistrev, Context ctx,
        String filename) {

    FileOutputStream fos;
    try {
        fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(masterlistrev);
        oos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

protected void onStop() {
    super.onStop();
    writeListToFile((ArrayList<HashMap<String, String>>) painItems,
            getApplicationContext(), serfilename);
}
protected void onDestroy(){

    writeListToFile((ArrayList<HashMap<String, String>>) painItems,
            getApplicationContext(), serfilename);
    super.onDestroy();
}

РЕДАКТИРОВАТЬ - МЕТОДОМ СОЗДАНИЯ

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.addscreen);
    // getPainItems from the saved file
    if (loadListFromFile((ArrayList<HashMap<String, String>>) painItems) != null)
        painItems = loadListFromFile((ArrayList<HashMap<String, String>>) painItems);
    // if it's the first time opening the app, then go to 'AddMyInfo.class'
    serfilename = "hello";
    SharedPreferences settings = this.getSharedPreferences("MyApp", 0);
    SharedPreferences.Editor e = settings.edit();
    boolean firstrun = settings.getBoolean("firstrun", true);
    if (firstrun) {
        e.putBoolean("firstrun", false);
        e.commit();
        Intent intent = new Intent(this, AddMyInfo.class);
        startActivity(intent);
    }
    // initialize painTitle and set its font
    painTitle = (TextView) findViewById(R.id.painTitle);
    Typeface font = Typeface.createFromAsset(getAssets(),
            "Chantelli_Antiqua.ttf");
    painTitle.setTypeface(font);
    listthings = (ListView) findViewById(R.id.listthings);
    from = new String[] { "row_1", "row_2" };
    to = new int[] { R.id.row1, R.id.row2 };

    adapter = new SimpleAdapter(this, painItems, R.layout.mylistlayout,
            from, to);
    listthings.setAdapter(adapter);
    listthings.setOnItemClickListener(this);
    listthings.setOnItemLongClickListener(this);

    addButton = (Button) findViewById(R.id.addButton);
    addButton.setOnClickListener(this);
    listthings.setChoiceMode(CHOICE_MODE_SINGLE);

}

Как вы можете видеть, я переопределил методы OnStop () и OnDestroy, чтобы попытаться это сделать. Я положил writeListToFile () в методе OnCreate (). Любое решение приветствуется.

1 Ответ

0 голосов
/ 27 июля 2011

Хорошо, возможно ли при повторном запуске вы записываете свой пустой список массивов в свой файл и впоследствии пытаетесь получить доступ к указанному списку? У меня такое чувство, что все пишет и читает правильно, но есть логический недостаток: либо уничтожение вашего текстового файла (MODE_PRIVATE стирает все в файле, когда вы вызываете его, в то время как MODE_APPEND пишет в конец его), либо запись в него пустого массива. Могу ли я увидеть ваш метод onCreate ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...