2011-05-18 33 views
4

我的應用程序使用外部庫以JAR文件的形式查詢服務。當我查詢這個服務時,我得到一個對象列表(一般使用對象,而不是對象),它們沒有以當前的形式實現Parcelable。我需要在活動之間發送這些對象之一,所以我假設我需要以某種方式使它們實現Parcelable。但是,如果它們不是我的對象,我不知道該怎麼做,並且我在網上找到的所有教程似乎只處理作者爲他自己的項目創建的對象。如何在外部對象上實現Parcelable?

任何幫助將不勝感激。讓我知道我是否需要澄清一些事情。

回答

2

另一種選擇是使用你的應用程序來存儲這些對象。簡單的子類應用,使它成爲一個獨立的,並在你的Manifest.xml聲明它

public class MyApplication extends Application { 
    private static final MyApplication instance; 

    public static MyApplication getInstace() { 
     return instance; 
    } 

    public void onCreate() { 
     instance = this; 
    } 

    private MyObject myObj; 

    public MyObject getMyObject() { 
     return this.myObj; 
    } 

    public void setMyObject(MyObject myObj) { 
     this.myObj = myObj; 
    } 
} 

那麼以後你可以存儲它:

MyApplication.getInstance().setMyObject(anObject); 

,並恢復它:

MyObject anObject = MyApplication.getInstance().getMyObject(); 

記住即:

  1. 聲明MyApplic ation類作爲Manifest.xml中的應用程序
  2. 如果您的進程被終止或退出,那麼您的數據將不再可用。
+0

這工作,謝謝。我想通過將對象傳遞給活動來做到這一點(也許最終我會改變它在未來以這種方式工作),但現在這是最簡單和最有效的解決方案。 – jnevelson 2011-05-18 02:57:39

+0

我不明白你爲什麼要讓MyApp成爲單身人士,因爲操作系統似乎創建了MyApp的_single_實例,並且getApplicationContext()似乎總是返回操作系統創建的MyApp的單個實例。這樣「全局訪問點」將返回該類的單個實例。 – JAL 2011-05-18 03:46:09

+0

@JAL是的,它只是爲了方便起見,否則你將需要像getApplicationContext()這樣的東西,然後將它轉換爲你的Application類。請注意,instace是在重寫的onCreate方法中分配的,因此它與OS創建的相同。 – aromero 2011-05-18 12:39:21

3

假設你可以實例化對象自己的新副本,您可以隨時使用的組成和實現自己的Parcelable數據傳輸對象做轉移:

  1. 創建一個新的Parcelable類,姑且稱之爲PObject。
  2. 爲PObject添加一個構造函數,該構造函數接受未實現Parcelable的對象的副本。
  3. 在PObject上創建一個方法,該方法返回未實現Parcelable的對象的完全實例化副本。

    您現在應該可以使用PObject實現來傳輸對象。

Parcelable interface的文檔顯示了一個傳遞整數的基本示例。

當然,這裏假設你需要Parcelable:如果活動在同一個進程中,你可能只需要使用全局靜態傳遞它們。它不是最漂亮的,但它通常足夠好。

+0

我怎麼知道他們是否在同一個進程?這是一個相對簡單的應用程序;我有一個主要的ListActivity顯示標題列表,然後單擊標題時在另一個活動中顯示更多信息。我試圖在兩個活動之間傳遞的對象只包含有關標題和說明以及其他參數的信息。 – jnevelson 2011-05-18 02:16:19

+0

如果它們是同一個APK的一部分,那麼它們可能處於相同的過程中。 – Femi 2011-05-18 02:36:19

+0

當您第一次建議並在您的對象上使用合成而不是將其存儲爲全局靜態時,它更好(代碼看起來更好)來實現Parcelable。 – Vince 2014-10-22 15:01:53