2012-04-17 58 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

相關問題