你好我的应用程序中我需要存储具有多个字段的单个对象。此时它就像这样保存了
@Override
public Object onRetainNonConfigurationInstance() {
return UILApplication.advert;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Advert retainedAdvert = (Advert) getLastNonConfigurationInstance();
if (retainedAdvert != null) {
UILApplication.advert = retainedAdvert;
}
}
UILApplication是单身来保持广告。有时(通常在呼叫摄像机时)广告对象被发送到默认值。所以我想知道kepp这个对象的保存和有效方法。将它存储在文件/序列化或为单个记录创建数据库或者有更好的东西是明智的吗?
答案 0 :(得分:1)
取决于你的物体有多大。尝试使用共享偏好设置:http://developer.android.com/guide/topics/data/data-storage.html#pref
首选项的组合,填充/读取它的正确位置以及一些静态init方法可以为您完成任务。
希望它有所帮助。
答案 1 :(得分:1)
取自我的计算器:
@SuppressWarnings("unchecked")
private void loadState() {
ObjectInputStream ois;
try {
ois = new ObjectInputStream(openFileInput(FILE_STATE));
state = ((State) ois.readObject());
ois.close();
ois = new ObjectInputStream(openFileInput(FILE_HISTORY));
historyListAdapter.setItems((List<String>) ois.readObject());
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
state = new State();
} catch (IOException e) {
e.printStackTrace();
state = new State();
} catch (ClassNotFoundException e) {
Toast t = Toast.makeText(this, "Error parsing saved state",
Toast.LENGTH_SHORT);
t.show();
state = new State();
}
setState(state);
}
private void saveState() {
ObjectOutputStream oos;
try {
oos = new ObjectOutputStream(openFileOutput(FILE_STATE,
Context.MODE_PRIVATE));
oos.writeObject(state);
oos.close();
oos = new ObjectOutputStream(openFileOutput(FILE_HISTORY,
Context.MODE_PRIVATE));
oos.writeObject(historyListAdapter.getItems());
oos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onPause() {
saveState();
super.onPause();
}
在onCreate()中调用loadState()。
对我来说工作得很好,我知道不建议在android中使用java序列化,但我没有遇到任何错误或错误。没有性能问题。
您当然应该根据您的应用程序调整错误处理。