0

您好,在我的应用程序中,我需要存储具有多个字段的单个对象。此刻它是这样保存的

@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 是单例以保留广告。有时(通常在调用相机时)广告对象被默认设置。所以我想知道保存这个对象的保存和有效方法。将其存储在文件中/序列化它或为单个记录创建数据库是否明智,或者有更好的方法?

4

2 回答 2

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

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

于 2013-10-25T19:59:53.560 回答
1

取决于你的对象有多大。尝试共享偏好:http: //developer.android.com/guide/topics/data/data-storage.html#pref

偏好组合、填充/读取的正确位置以及一些静态初始化方法可以为您做事。

希望能帮助到你。

于 2013-10-25T19:51:02.963 回答