数组,HashMap,字符串 - 如何通过Bundle发送它?

时间:2016-07-06 12:12:50

标签: java android

我知道如何通过Bundle发送简单数组但知道我需要发送类似的东西:

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

如何通过Bundle发送和检索它?

6 个答案:

答案 0 :(得分:2)

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

如果您想要更多OOP方法,可以将要发送的数据封装到实现SongData的对象(例如类型Parcelable)中。有关示例,请参阅this post。另请参阅Parcelable的{​​{3}}:

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

答案 1 :(得分:2)

这是错误的封装,糟糕的面向对象思维。

听起来您需要Song抽象,因此您可以返回ListSong个实例:

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

我会避免Java序列化;使用Jackson将它们序列化为JSON。

答案 2 :(得分:1)

在发件人类

bundle.putSerializable("something", songsListData);

和接收器类

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

答案 3 :(得分: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");  

答案 4 :(得分: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数据转换为字符串

答案 5 :(得分:0)

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

用于检索接收器类中的数据