最近、Android ファイルのシリアル化に関する何千ものトピックを読みましたが、まだ有効な解決策が見つかりませんでした。
ArrayList
シリアライズ可能なクラスと、シリアライズ可能なクラス要素 onResume()
をそれぞれシリアライズおよびデシリアライズするアクティビティがありonPause()
ます。
私のソリューションでは、seriazlie メソッドと deserialize メソッドの両方で IOException がスローされます。
package classes;
import java.io.Serializable;
import java.util.Date;
import com.google.android.maps.GeoPoint;
public class Note implements Serializable {
public Note() {
}
public Note(Date date, String name, GeoPoint geoPoint) {
this.date = date;
this.name = name;
this.geoPoint = geoPoint;
}
private static final long serialVersionUID = -7789719052842264659L;
private Date date;
private String name;
private GeoPoint geoPoint;
public Date getDate() {
return date;
}
public String getName() {
return name;
}
public GeoPoint getGeoPoint() {
return geoPoint;
}
@Override
public String toString() {
return String.format("Name: %S%nDate: %2$td-%2$tb-%2$tY%nTime: %2$tH:%2$tM:%2$tS", name, date);
}
}
ここに私の方法があります:
private void serializeQuotes() {
try {
FileOutputStream fos = openFileOutput("test.txt", Context.MODE_WORLD_READABLE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(notes);
oos.close();
}
catch (IOException e) {
Toast.makeText(this, "Serialization error", Toast.LENGTH_SHORT).show();
}
}
@SuppressWarnings("unchecked")
private void deserializeQuotes() {
try {
FileInputStream fis = openFileInput("test.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
notes = (ArrayList<Note>) ois.readObject();
ois.close();
}
catch (IOException e) {
Toast.makeText(this, "Deserialization error", Toast.LENGTH_SHORT).show();
}
catch (ClassNotFoundException e) {
}
}
どこにnotes
いる
ArrayList<Note>
AppFolder にファイルを作成する必要があります。
File savedLocationsDirectory = new File(Environment.getExternalStorageDirectory().getPath().concat("/AppFolder"));
if (!savedLocationsDirectory.exists()) savedLocationsDirectory.mkdirs();
savedLocationsFile = new File(savedLocationsDirectory, "savedLocations.gc");
そして私は次に使用します:FileInputStream fis = new FileInputStream(savedLocationsFile);
そしてFileOutputStream fos = new FileOutputStream(savedLocationsFile, true);
どちらの場合も、シリアル化は機能しません。