2012-03-04 93 views
2

我已經編寫了一個具有<intent-filter/>的應用程序,以便其他應用程序可以使用startActivityForResult()啓動它。在結果在Android應用程序中使用startActivityForResult

(應用程序A)

public class MyObject implements Serializable { 
     private String name; 
     private String[] items 
} 

而設置的吧:

(應用程序A)

getIntent().putExtra("Extra_MyObject", myObject); 
setResult(RESULT_OK, getIntent()); 
當此活動結束後它已創建了一個對象,它是像

因此,接受此意向的第二個活動有一個問題,它如何知道要接收的意向的名稱我將如何創建收到的對象並將其重新轉換爲不屬於此應用程序的MyObject

(應用B)

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == MY_REQ_CODE){ 
     if(resultCode == RESULT_OK){ 
       // So here how do I know what the intent data name is i.e. "Extra_MyObject" 
       // and how would I know the structure to cast the object back to a MyObject that isn't part of this project? 

     } 
    } 
} 

請問我只是模仿MyObject類第二應用程序並將其轉換爲呢? 還有其他選擇嗎?

回答

3

你可以使用像Jackson這樣的庫來將你的對象序列化爲一個JSON字符串,然後你在另一端反序列化。

它更加靈活,並且可以消除如果您決定添加一個額外字段時傳遞的數據版本不一致的問題。

此外,這兩個應用程序不再需要在相同的名稱空間中維護類,甚至不需要使用相同的名稱來調用它們。

作爲最後一點,您不再需要發佈jar,只有您的文檔就足夠了。

+0

實際上這是個好主意。我可以用'MyObject'中的'getAsJson()'創建自己的JSON對象,並將其作爲'Intent'上的'String'發送,然後我只需要維護一個帶有JSON結構的API – Blundell 2012-03-04 16:08:57

+0

yes 。無需創建getAsJson方法並自己實現它。看看傑克遜。它會照顧到你的序列化爲JSON。 – 2012-03-04 16:10:07

+2

請注意,Android內置了'org.json'類.Jackson很酷,但是您對第三方(即使用此結果的任何人)施加的依賴性越少,您的效果就越好。 – CommonsWare 2012-03-04 16:39:02

1

它是如何知道的意圖額外的名義接收

通過讀取第一應用程序的作者發表的API文檔。

我將如何創建收到的對象並將其轉換回不屬於此應用程序的MyObject?

第一個應用程序的作者還必須發佈一個包含實現MyObject的JAR,第二個應用程序的作者將添加到他們的項目中。而且,第一個應用程序的作者可能不需要更改MyObject,或者至少確保序列化版本控制工作正常。

我只是在第二個應用程序中模仿MyObject類並將其轉換爲該類?

如果通過「模仿」你的意思是「有一個類具有完全相同的類名,完全相同的包名和完全相同的序列化邏輯」,那麼是的,儘管我然後擔心你使用術語「剛剛」 ... :-)

如果MyObject有你所描述的結構,只考慮把StringString[]作爲單獨的附加功能,或者把它們放在一個Bundle並使用它作爲一個額外的,以避免試圖在應用程序之間使用自定義Parcelable對象。

+0

乾杯馬克,MyObject比這更復雜。任何推薦的鏈接用於創建API文檔併發布jar? – Blundell 2012-03-04 16:00:07

+0

@Blundell:「任何用於創建API文檔的建議鏈接」 - ummmm ...使用網頁? 「併發佈一個罐子?」 - 這是標準的Java,除非'MyObject'具有Android特定的鉤子(例如,需要'android。*'類)。在這種情況下,我建議創建一個Android庫項目而不是JAR。 – CommonsWare 2012-03-04 16:36:50

+0

我的意思更像是一個簡單的版本:http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/javadoc.html我會去Google! – Blundell 2012-03-04 17:31:53

相關問題