我正在尝试在整个 Android 应用程序中保留数据对象。我希望能够访问一个活动中的对象,修改它,保存它,导航到一个新活动,并使用更新的值访问同一个对象。
我本质上说的是缓存,但我的数据对象很复杂。例如,ObjectA 包含 ObjectB,ObjectB 又包含 ObjectC。有谁知道是否有在 Sql 中持久化复杂对象的好方法、工具或框架?
我正在尝试在整个 Android 应用程序中保留数据对象。我希望能够访问一个活动中的对象,修改它,保存它,导航到一个新活动,并使用更新的值访问同一个对象。
我本质上说的是缓存,但我的数据对象很复杂。例如,ObjectA 包含 ObjectB,ObjectB 又包含 ObjectC。有谁知道是否有在 Sql 中持久化复杂对象的好方法、工具或框架?
将静态字段放在子类应用程序中。同样在您的清单中,放置:
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();
...
}
}
为什么不使用 JSON 序列化机制?
与对对象的静态访问相关联,您可以轻松构建具有一些基本功能的轻量级数据库:
您还可以将对象存储在不同的文件中,并使用像这样的流式 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,但速度相同。
您可以使用 ORM 框架,如OrmLite将对象映射到 sql,但对于您的情况来说,这可能是一种矫枉过正。
您还可以使这些共享对象Parcelable并通过 Intent 在活动之间传递它们。
您还可以将这些对象保存到 SharedPreferences 中,这样每个 Activity 都可以在需要时访问它们,并且这些对象也以这种方式持久化。不过,这可能意味着更多的 IO 访问,因此也要考虑到这一点。为此,您可以使用例如 Gson 更轻松地序列化对象。
这些是我会考虑的解决方案。但是无论你做什么,都不要把这个通用对象放入某种“标准”的全局静态变量中,比如使用自定义的应用程序类、静态字段或任何单例模式的实现,这些都是 Android 上非常脆弱的构造。