什么是最适合在android中存储对象的方法?

时间:2013-10-25 19:44:19

标签: android

你好我的应用程序中我需要存储具有多个字段的单个对象。此时它就像这样保存了

@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这个对象的保存和有效方法。将它存储在文件/序列化或为单个记录创建数据库或者有更好的东西是明智的吗?

2 个答案:

答案 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序列化,但我没有遇到任何错误或错误。没有性能问题。

您当然应该根据您的应用程序调整错误处理。