當我的應用程序啓動時,它連接到一個數據庫並下載一些XML格式的數據。這是佈局:寫一個ArrayList到SD卡
<Customers>
<Customer>
<name>...</name>
...
</Customer>
<Customer>
<name>...</name>
...
</Customer>
...
</Customer>
對於我創建類Customer
wicht我存儲在一個ArrayList中的對象的每個客戶。用戶可以編輯和添加每個客戶的一些數據,並可以將其上傳回服務器。
問題是我不知道在本地存儲數據的最佳方式是什麼,所以如果我的應用程序關閉或用戶沒有互聯網了,他們會有備份。我現在將所有Customer
對象轉換回XML,然後將其存儲在SD卡上,但這不是我認爲的好解決方案。每個客戶都有大約40個字符串,10個整數和一些我必須存儲的布爾值。有沒有更好的方式在本地存儲數據?
我發現some code這個可以存儲一個ArrayList,但它不適用於自定義類。
編輯:我用this tutorial來解決我的問題。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import android.os.Environment;
public class SerializeData {
public static byte[] serializeObject(Object o) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(o);
out.close();
// Get the bytes of the serialized object
byte[] buf = bos.toByteArray();
return buf;
} catch (IOException ioe) {
CreateLog.addToLog(ioe.toString());
return null;
}
}
public static Object deserializeObject(byte[] b) {
try {
ObjectInputStream in = new ObjectInputStream(
new ByteArrayInputStream(b));
Object object = in.readObject();
in.close();
return object;
} catch (ClassNotFoundException cnfe) {
CreateLog.addToLog(cnfe.toString());
return null;
} catch (IOException ioe) {
CreateLog.addToLog(ioe.toString());
return null;
}
}
public static void saveData(){
byte[] arrayData = SerializeData
.serializeObject(MyTasks.allCustomers);
BufferedOutputStream bos;
try {
bos = new BufferedOutputStream(new FileOutputStream(
Environment.getExternalStorageDirectory()
+ "/myprogram/myarray.txt"));
bos.write(arrayData);
bos.flush();
bos.close();
} catch (FileNotFoundException e) {
CreateLog.addToLog(e.toString());
} catch (IOException e) {
CreateLog.addToLog(e.toString());
}
}
public static ArrayList<Customer> getData(){
File afile = new File(Environment.getExternalStorageDirectory()
+ "/myprogram/myarray.txt");
int size = (int) afile.length();
byte[] bytes = new byte[size];
try {
BufferedInputStream buf = new BufferedInputStream(new FileInputStream(afile));
buf.read(bytes, 0, bytes.length);
buf.close();
} catch (FileNotFoundException e) {
CreateLog.addToLog(e.toString());
} catch (IOException e) {
CreateLog.addToLog(e.toString());
}
return (ArrayList<Customer>) SerializeData.deserializeObject(bytes);
}
}
」有沒有更好的方式在本地存儲數據?「 - SQLite數據庫將是我的第一選擇。 – Squonk