2016-07-06 63 views
2

我知道如何通過捆綁發送簡單的數組,但知道我要送這樣的事情:數組,HashMap,字符串 - 如何通過Bundle發送它?

ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>(); 

如何發送,並通過捆綁retrive呢?

+0

對不起,什麼是捆綁檢索數據? – GhostCat

+1

您應該更喜歡接口類型(例如List,Map)到實現類型;你應該把它們封裝在數據結構以外的對象中。壞封裝。 – duffymo

回答

2

ArrayLists和HashMaps是可序列化的對象。所以只需使用Bundle#putSerializable(bundleKey, serializable)

如果您想要更多的OOP方法,您可以將要發送的數據封裝到實現Parcelable的對象中(比如類型SongData)。一個例子見this post。也看到了reference documentationParcelable

public class MyParcelable implements Parcelable { 
    private int mData; 

    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeInt(mData); 
    } 

    public static final Parcelable.Creator<MyParcelable> CREATOR 
     = new Parcelable.Creator<MyParcelable>() { 
     public MyParcelable createFromParcel(Parcel in) { 
      return new MyParcelable(in); 
     } 

     public MyParcelable[] newArray(int size) { 
      return new MyParcelable[size]; 
     } 
    }; 

    private MyParcelable(Parcel in) { 
    mData = in.readInt(); 
    } 
} 
2

這是不好的封裝,對象面向窮人思維。

這聽起來像你需要一個Song抽象,所以你可以返回SongList實例:

List<Song> songList = new ArrayList<Song>(); 

我會避免Java序列化;使用Jackson將它們序列化爲JSON。

+0

我需要檢索文件名和文件路徑,所以我的想法是好的。它必須是二維的 – ramzixp

+0

不,它不好。這些應該在宋抽象中。什麼機器上的文件路徑?更糟糕的想法。一個URL會更加RESTful。 – duffymo

+0

本地機器,正好是SDcard – ramzixp

1

發信人類

bundle.putSerializable("something", songsListData); 

和接收機類

ArrayList<HashMap<String, String>> songsListData = (ArrayList<HashMap<String, String>>)bundle.getSerializable("something"); 
; 
1

使用類似發信人

ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>(); 
intent.putExtra("song_list", songsListData); 

,比接收機類以下

ArrayList<String> myList = (ArrayList<HashMap<String, String>>) getIntent().getSerializableExtra("song_list"); 
0
ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>(); 
Gson gson = new Gson(); 
String str_json = gson.toJson(songsListData); 
Bundle bundle=new Bundle(); 
bundle.putString("data",str_json); 

使用GSON轉換ArrayList的數據轉換成字符串

0
Gson gson = new Gson(); 
Type type = new TypeToken<ArrayList<HashMap<String, String>>>() {}.getType(); 
ArrayList<HashMap<String, String>> arrayList = gson.fromJson(data, type); 

對於reciever類