0

我正在尝试在整个 Android 应用程序中保留数据对象。我希望能够访问一个活动中的对象,修改它,保存它,导航到一个新活动,并使用更新的值访问同一个对象。

我本质上说的是缓存,但我的数据对象很复杂。例如,ObjectA 包含 ObjectB,ObjectB 又包含 ObjectC。有谁知道是否有在 Sql 中持久化复杂对象的好方法、工具或框架?

4

3 回答 3

1

将静态字段放在子类应用程序中。同样在您的清单中,放置:

android:name="MyApp"在您的应用程序标签内。

也可以从其他文件访问,只需使用:

MyApp myApp = (MyApp)getApplicationContext();

请参阅此处如何在 Android 中声明全局变量?

class MyApp extends Application {

  private String myState;

  public String getState(){
    return myState;
  }
  public void setState(String s){
    myState = s;
  }
}

class Blah extends Activity {

  @Override
  public void onCreate(Bundle b){
    ...
    MyApp appState = ((MyApp)getApplicationContext());
    String state = appState.getState();
    ...
  }
}
于 2012-04-17T15:58:42.197 回答
0

为什么不使用 JSON 序列化机制?

与对对象的静态访问相关联,您可以轻松构建具有一些基本功能的轻量级数据库:

  • loadObjectsFromCache
  • saveObjectsInCache
  • 获取对象

您还可以将对象存储在不同的文件中,并使用像这样的流式 json 解析器:http ://code.google.com/p/google-gson/

这个是一样的:http: //developer.android.com/reference/android/util/JsonReader.html 但即使你的应用程序api级别低于11也可以使用。

它比基本的 DOM 解析器使用更少的内存:http: //developer.android.com/reference/org/json/JSONObject.html,但速度相同。

于 2012-04-17T15:39:36.020 回答
0
  • 您可以使用 ORM 框架,如OrmLite将对象映射到 sql,但对于您的情况来说,这可能是一种矫枉过正。

  • 您还可以使这些共享对象Parcelable并通过 Intent 在活动之间传递它们。

  • 您还可以将这些对象保存到 SharedPreferences 中,这样每个 Activity 都可以在需要时访问它们,并且这些对象也以这种方式持久化。不过,这可能意味着更多的 IO 访问,因此也要考虑到这一点。为此,您可以使用例如 Gson 更轻松地序列化对象。

这些是我会考虑的解决方案。但是无论你做什么,都不要把这个通用对象放入某种“标准”的全局静态变量中,比如使用自定义的应用程序类、静态字段或任何单例模式的实现,这些都是 Android 上非常脆弱的构造。

于 2012-04-17T15:43:43.350 回答