我正在尝试在整个Android应用中保留数据对象。我希望能够访问一个活动中的对象,修改它,保存它,导航到一个新活动,并使用更新的值访问同一个对象。
我实际上谈论的是缓存,但我的数据对象很复杂。例如,ObjectA包含包含ObjectC的ObjectB。有谁知道在Sql中持久化复杂对象的好方法,工具或框架?
答案 0 :(得分:1)
在子类Application中放置一个静态字段。同样在你的清单中,放:
应用程序标记内的 android:name="MyApp"
。
要从其他文件访问,只需使用:
MyApp myApp = (MyApp)getApplicationContext();
见How to declare global variables in 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();
...
}
}
答案 1 :(得分:0)
为什么不使用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, 但速度相同。
答案 2 :(得分:0)
您可以使用ORM框架(如OrmLite)将对象映射到sql中,但对于您来说情况可能有点过分。
您也可以创建这些共享对象Parcelable,并通过Intents在活动之间传递它们。
您还可以将这些对象保存到SharedPreferences中,这样每个Activity都可以在需要时访问它们,并且对象也以这种方式保留。这可能意味着更多的IO访问,因此也要考虑到这一点。你可以用例如Gson为此更加无痛地序列化对象。
这些是我考虑的解决方案。但无论你做什么,都不要将这个常见对象放入某种“标准”全局静态变量中,比如使用自定义Application类,静态字段或Singleton模式的任何实现,这些都是Android上非常脆弱的结构。