2012-04-17 104 views
0

我试图在整个Android应用中保存数据对象。我希望能够访问一个活动中的对象,修改它,保存它,导航到一个新活动并使用更新后的值访问同一个对象。什么是通过Android应用程序保持对象的好方法?

我基本上谈论的是一个缓存,但我的数据对象很复杂。例如,ObjectA包含ObjectB,其中包含ObjectC。有谁知道在Sql中保存复杂对象的好方法,工具还是框架?

+0

是否有不及格的对象为您的意图额外特别的原因? – Th0rndike 2012-04-17 15:29:38

回答

0
  • 你可以使用一个ORM框架,像OrmLite映射对象到SQL,但它可能是你的情况矫枉过正。

  • 您也可以制作这些共享对象Parcelable,并在活动之间通过Intents。

  • 您也可以将这些对象保存到SharedPreferences中,以便每个Activity只要感到需要就可以访问它们,并且这些对象也是以这种方式保存的。这可能意味着更多的IO访问,所以也要考虑到这一点。您可以使用例如Gson为此更无痛地序列化对象。

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

+0

我们考虑过一个ORM。目前,我们通过Intents传递对象,但我们试图实现缓存,以减少从服务器检索对象所需的网络调用数量。你之前用过OrmLite吗? – Quentamia 2012-04-17 15:55:15

+0

除了一些基本的,HelloWorld级别的测试之外,所以我不能告诉你它有多稳定/好,但它看起来很有前途。通常我会使用SharedPrefs或意向传递解决方案。 – 2012-04-17 16:49:22

+0

我们选择了OrmLite。它具有简单的配置,我们可以发出原始查询(我们需要的东西,因为我们并不总是有行ID)。 – Quentamia 2012-04-18 15:12:13

0

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

在具有静态访问到你的对象,你可以很容易地与一些基本functionnalities建立一个精简版,重量数据库的关联:

  • loadObjectsFromCache
  • saveObjectsInCache
  • getObjects

你可以还将你的对象存储在不同的文件中,并使用像这样的流式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, 但以相同的速度。

1

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

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(); 
    ... 
    } 
} 
+0

Zowie,这是很好的知道! 我一直在寻找一些简单的东西一段时间(我已经编程了一年的Android);它并不能代替更复杂的设计,但有时它正是你所需要的。不知道我以前从来没有找到过。感谢凯尔! – 2013-02-08 21:26:04

相关问题