2013-06-11 8 views
2

У меня есть приложение для Android, и я хотел бы прочитать и написать ArrayList<MyClass> для внутреннего хранилища.Прочитайте ArrayList из внутреннего хранилища

Сочинение часть работы (я думаю, не проверял еще :-)):

ArrayList<MyClass> aList; 

    public void saveToInternalStorage() { 
    try { 
     FileOutputStream fos = ctx.openFileOutput(STORAGE_FILENAME, Context.MODE_PRIVATE); 
     fos.write(aList.toString().getBytes()); 
     fos.close(); 
    } 
    catch (Exception e) { 
     Log.e("InternalStorage", e.getMessage()); 
    } 
} 

Но то, что я хочу сделать сейчас, это прочитать весь ArrayList из Хранилища и вернуть его в качестве ArrayList так:

public ArrayList<MyClass> readFromInternalStorage() { 
     ArrayList<MyClass> toReturn; 
     FileInputStream fis; 
     try { 
      fis = ctx.openFileInput(STORAGE_FILENAME); 

      //read in the ArrayList 
      toReturn = whatever is read in... 

      fis.close(); 
     } catch (FileNotFoundException e) { 
      Log.e("InternalStorage", e.getMessage()); 
     } catch (IOException e) { 
      Log.e("InternalStorage", e.getMessage()); 
     } 
     return toReturn 
} 

Я никогда не читал в файле с Android до, так что я не знаю, если это вообще возможно. Но есть ли способ, который я могу прочитать в моем обычном ArrayList?

ответ

5

вы должны сериализации/десериализации вашего объекта:

Ваш MyClass должен implments Сериализуемый и все члены внутри MyClass должны быть сериализуемым

public void saveToInternalStorage() { 
     try { 
      FileOutputStream fos = ctx.openFileOutput(STORAGE_FILENAME, Context.MODE_PRIVATE); 
      ObjectOutputStream of = new ObjectOutputStream(fos); 
      of.writeObject(aList); 
      of.flush(); 
      of.close(); 
      fos.close(); 
     } 
     catch (Exception e) { 
      Log.e("InternalStorage", e.getMessage()); 
     } 
} 

десериализации объекта:

public ArrayList<MyClass> readFromInternalStorage() { 
    ArrayList<MyClass> toReturn; 
    FileInputStream fis; 
    try { 
     fis = ctx.openFileInput(STORAGE_FILENAME); 
     ObjectInputStream oi = new ObjectInputStream(fis); 
     toReturn = oi.readObject(); 
     oi.close(); 
    } catch (FileNotFoundException e) { 
     Log.e("InternalStorage", e.getMessage()); 
    } catch (IOException e) { 
     Log.e("InternalStorage", e.getMessage()); 
    } 
    return toReturn 
} 
+0

Кажется , но на oi.readObject() Eclipse дает мне «невозможно конвертировать из Object to ArrayList » Тип несоответствия ... Я думаю, что приведение в ArrayList не будет работать в этом случае? –

+0

Вы можете бросить безопасно – Blackbelt

+0

Это работает :) Теперь я получаю предупреждение: Тип безопасности: Непроверенный бросок от Object to ArrayList . А также членом MyClass является [MarkerOption] (http://developer.android.com/reference/com/google/android/gms/maps/model/MarkerOptions.html), который, кажется, не сериализуем ... Могу ли я достичь того же с Parcelable вместо Serializable? –

Смежные вопросы