我试图在整个Android应用中保存数据对象。我希望能够访问一个活动中的对象,修改它,保存它,导航到一个新活动并使用更新后的值访问同一个对象。什么是通过Android应用程序保持对象的好方法?
我基本上谈论的是一个缓存,但我的数据对象很复杂。例如,ObjectA包含ObjectB,其中包含ObjectC。有谁知道在Sql中保存复杂对象的好方法,工具还是框架?
我试图在整个Android应用中保存数据对象。我希望能够访问一个活动中的对象,修改它,保存它,导航到一个新活动并使用更新后的值访问同一个对象。什么是通过Android应用程序保持对象的好方法?
我基本上谈论的是一个缓存,但我的数据对象很复杂。例如,ObjectA包含ObjectB,其中包含ObjectC。有谁知道在Sql中保存复杂对象的好方法,工具还是框架?
你可以使用一个ORM框架,像OrmLite映射对象到SQL,但它可能是你的情况矫枉过正。
您也可以制作这些共享对象Parcelable,并在活动之间通过Intents。
您也可以将这些对象保存到SharedPreferences中,以便每个Activity只要感到需要就可以访问它们,并且这些对象也是以这种方式保存的。这可能意味着更多的IO访问,所以也要考虑到这一点。您可以使用例如Gson为此更无痛地序列化对象。
这些是我会考虑的解决方案。但是无论你做什么,都不要将这个通用对象放入某种“标准”全局静态变量中,例如使用自定义Application类,静态字段或Singleton模式的任何实现,这些都是Android上非常脆弱的构造。
我们考虑过一个ORM。目前,我们通过Intents传递对象,但我们试图实现缓存,以减少从服务器检索对象所需的网络调用数量。你之前用过OrmLite吗? – Quentamia 2012-04-17 15:55:15
除了一些基本的,HelloWorld级别的测试之外,所以我不能告诉你它有多稳定/好,但它看起来很有前途。通常我会使用SharedPrefs或意向传递解决方案。 – 2012-04-17 16:49:22
我们选择了OrmLite。它具有简单的配置,我们可以发出原始查询(我们需要的东西,因为我们并不总是有行ID)。 – Quentamia 2012-04-18 15:12:13
为什么不使用JSON序列化机制?
在具有静态访问到你的对象,你可以很容易地与一些基本functionnalities建立一个精简版,重量数据库的关联:
你可以还将你的对象存储在不同的文件中,并使用像这样的流式json解析器:http://code.google.com/p/google-gson/
这是这一个相同的:http://developer.android.com/reference/android/util/JsonReader.html ,但可以使用,即使到11
它使用较少的内存比基本DOM解析器您的应用程序API级别为劣: http://developer.android.com/reference/org/json/JSONObject.html, 但以相同的速度。
将静态字段放入子类应用程序中。同样在您的清单中,将:
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();
...
}
}
Zowie,这是很好的知道! 我一直在寻找一些简单的东西一段时间(我已经编程了一年的Android);它并不能代替更复杂的设计,但有时它正是你所需要的。不知道我以前从来没有找到过。感谢凯尔! – 2013-02-08 21:26:04
是否有不及格的对象为您的意图额外特别的原因? – Th0rndike 2012-04-17 15:29:38