这里是一段代码,可以将可序列化对象写入文件,这可能是你需要的。我已经使用ArrayList进行了测试,它可以正常工作。您也可以修改输出,而不是将其写入文件,可以通过extras或bundle将其传递给活动。我在Android版本<3.0中使用了此方法。
要读取已包含序列化对象的文件:
String ser = SerializeObject.ReadSettings(act, "myobject.dat");
if (ser != null && !ser.equalsIgnoreCase("")) {
Object obj = SerializeObject.stringToObject(ser);
if (obj instanceof ArrayList) {
give = (ArrayList<String>)obj;
}
}
要将对象写入文件,请使用:
String ser = SerializeObject.objectToString(give);
if (ser != null && !ser.equalsIgnoreCase("")) {
SerializeObject.WriteSettings(act, ser, "myobject.dat");
} else {
SerializeObject.WriteSettings(act, "", "myobject.dat");
}
用于序列化对象的类:
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.Serializable;
import android.content.Context;
import android.util.Base64InputStream;
import android.util.Base64OutputStream;
import android.util.Log;
public class SerializeObject {
private final static String TAG = "SerializeObject";
public static String objectToString(Serializable object) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
new ObjectOutputStream(out).writeObject(object);
byte[] data = out.toByteArray();
out.close();
out = new ByteArrayOutputStream();
Base64OutputStream b64 = new Base64OutputStream(out,0);
b64.write(data);
b64.close();
out.close();
return new String(out.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static Object stringToObject(String encodedObject) {
try {
return new ObjectInputStream(new Base64InputStream(
new ByteArrayInputStream(encodedObject.getBytes()), 0)).readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void WriteSettings(Context context, String data, String filename){
FileOutputStream fOut = null;
OutputStreamWriter osw = null;
try{
fOut = context.openFileOutput(filename, Context.MODE_PRIVATE);
osw = new OutputStreamWriter(fOut);
osw.write(data);
osw.flush();
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(osw!=null)
osw.close();
if (fOut != null)
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static String ReadSettings(Context context, String filename){
StringBuffer dataBuffer = new StringBuffer();
try{
InputStream instream = context.openFileInput(filename);
if (instream != null) {
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String newLine;
while (( newLine = buffreader.readLine()) != null) {
dataBuffer.append(newLine);
}
instream.close();
}
} catch (java.io.FileNotFoundException f) {
Log.e(TAG, "FileNot Found in ReadSettings filename = " + filename);
try {
context.openFileOutput(filename, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
Log.e(TAG, "IO Error in ReadSettings filename = " + filename);
}
return dataBuffer.toString();
}
}