使用serializable发送对象的arraylist

时间:2015-07-10 08:20:31

标签: android serialization arraylist

我将我的JSON数据存储到对象的arraylist中,我的对象类是Venue,我将这些数据传递到另一个使用序列化片段的活动,但我没有在actvity中接收任何值。它正在接收额外的。 bundle不是null。

我的代码是:

片段:

 Intent intent = new Intent(getActivity(), SearchVenueActivity.class);

 //pass values
 Bundle bundle = new Bundle();
 bundle.putSerializable("arrayListVenue",arrayListVenue);
 intent.putExtras(bundle);
 startActivity(intent);

活动:

if (getIntent().hasExtra("arrayListVenue")) {
    Bundle bundle = getIntent().getExtras();
    if(bundle!=null)
        rowItems = (ArrayList<Venue>) bundle.getSerializable("arrayListVenue");
    else
        Log.e("null","null");
}

地点等级:

public class Venue implements Serializable{

    String venue_id;
    String venue_name;
    String venue_address;
    String venue_city;

    public String getVenue_city() {
        return venue_city;
    }

    public void setVenue_city(String venue_city) {
        this.venue_city = venue_city;
    }

    public Venue(String venue_id, String venue_name, String venue_address, String venue_city, String venue_zip, String venue_phone, String venue_mobile) {
        this.venue_id = venue_id;
        this.venue_name = venue_name;
        this.venue_address = venue_address;
        this.venue_city = venue_city;

        this.venue_zip = venue_zip;
        this.venue_phone = venue_phone;
        this.venue_mobile = venue_mobile;
    }

    public String getVenue_id() {
        return venue_id;
    }

    public void setVenue_id(String venue_id) {
        this.venue_id = venue_id;
    }

    public String getVenue_name() {
        return venue_name;
    }

    public void setVenue_name(String venue_name) {
        this.venue_name = venue_name;
    } 
}

4 个答案:

答案 0 :(得分:15)

尝试这种方式可以帮助您

首先要制作

Class Venue实现Serializable

public class Venue implements Serializable {
  /**
  * 
  */

private static final long serialVersionUID = 1L;

 }

在您的FirstActivity中这样做

  ArrayList<Venue> VenueArrayList = new ArrayList<Venue>();

  Intent intent = new Intent(this,secondActivity.class);
  intent.putExtra("VenueArrayList", VenueArrayList);

在您的SecondActivity中这样做

  ArrayList<Venue> VenueArrayList;
  VenueArrayList = (ArrayList<Venue>) getIntent().getSerializableExtra(
        "VenueArrayList");

答案 1 :(得分:2)

使用intent.putParcelableArrayListExtra("arrayListVenue",arrayListVenue);将arraylist置于意图中并使用intent.getParcelableArrayExtra("arrayListVenue")从SearchVenueActivity活动中获取arraylist 的修改 Tutorial for using parcelable

答案 2 :(得分:2)

从我的错误中学习。

我尝试使用 Serializable 发送数组和大对象,然后我的应用程序变得非常慢。做了一些测试,发现当需要大量的cpu和时间来解析它。因此(尽管不是你所谓的最佳实践)我已经创建了一个 CacheManager ,它可以在短时间内存储对象,并用它在片段活动之间传递更大的对象。

如果你想对你的设计做一个更准备的改变(稍后在我的项目中我就是这么做的话),那么完全从你的片段/活动中分离数据并通过 LoaderManagers 加载并通过只有特定的id或类似的东西(在我的情况下存储在db中的东西,所以它更容易)。

答案 3 :(得分:0)

使用Array List而不是Bundle Elements。 在您的主要活动中,试试这个:

Intent intent = new Intent(this, newactivity.class);
intent.putParceableListArrayExtra("your_array_list_name", arrayList);

在您想要检索它的下一个活动中,只需使用:

getIntent().getExtra("your_array_list_name", new ArrayList<> arrayList2);
相关问题