首页 > 解决方案 > 如何将带有 JSONObject 对象的 JSONArray 数组从一个活动发送到第二个活动

问题描述

我从服务器接收 JSONArray 我用 Jsonobject 创建了新的 Jsonarry,我想将它发送到另一个活动 当我通过异常从 jsonarray 获取数据时,我收到了另一个活动

JSOn 数组

{"restaurant_name":[{"restaurantname":"Tikka Mehal","fooditemname":"Chicken Fajita Pizza","fooditemprice":"800"},{"restaurantname":"Saege","fooditemname":"Chicken Fajita Pizza","fooditemprice":"800"}]}

AsynTask 类

        JSONObject sending_object = new JSONObject();
        JSONArray sending_array = new JSONArray();

        else
        {
            JSONObject jsonObject = new JSONObject(s);
            JSONArray jsonArray = jsonObject.getJSONArray("restaurant_name");
            for(int i =0;i<jsonArray.length();i++)
            {
                JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                sending_array.put((jsonObject1.getString("restaurantname")));
                sending_array.put(jsonObject1.getString("fooditemname"));
                sending_array.put(jsonObject1.getString("fooditemprice"));
            }

            sending_object.put("restaurant_name",sending_array);
            Intent intent = new Intent(context,RestaurantFoodItemActivity.class);
            intent.putExtra("restaurant_names",sending_object.toString());
            context.startActivity(intent);
        }

活动二

ArrayList 餐厅;

 Intent bundle = getIntent();
    try {
        JSONObject jsonObject = new JSONObject(bundle.getStringExtra("restaurant_names"));
        JSONArray jsonArray = jsonObject.getJSONArray("restaurant_name");
        for(int i =0;i<jsonArray.length();i++)
        {
            JSONObject jsonObject1 = jsonArray.getJSONObject(i);// there through exception
            String r_name = jsonObject1.getString("restaurantname");
            String f_name = jsonObject1.getString("fooditemname");
            String f_price = jsonObject1.getString("fooditemprice");
            restaurants.add(new Restaurant(r_name,f_name,f_price));
        }

标签: javaandroidarraysjson

解决方案


使用 Parcelable 或 Serializable 接口。尝试在一些实现 Parcelable 的餐厅对象中封装 json 数据。例子 :

public class Person implements Parcelable {

private String firstName;
private String lastName;
private List<Person> konwnPersons;
private List<String> qualifications;



public Person() {
    super();
}

public Person(Parcel parcel) {
    this.firstName = parcel.readString();
    this.lastName = parcel.readString();
    this.qualifications = parcel.readArrayList(null);
    this.konwnPersons = parcel.createTypedArrayList(Person.CREATOR);
}


public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

 public List<String> getQualification() {
    return qualification;
}
public void setQualifications(List<String> qualifications) {
    this.qualifications = qualifications;
}

public List<Person> getKonwnPersons() {
    return konwnPersons;
}

public void setKonwnPersons(List<Person> konwnPersons) {
    this.konwnPersons = konwnPersons;
}


public static final Creator<Person> CREATOR = new Creator<Person>() {
    @Override
    public Person createFromParcel(Parcel source) {
        return new Person(source);
    }

    @Override
    public Person[] newArray(int size) {
        return new Person[size];
    }
};


@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.firstName);
    dest.writeString(this.lastName);
    dest.writeList(this.qualifications);
    dest.writeTypedList(this.konwnPersons);

}
}

现在发送数据使用这个:

Intent secondActivityIntent = new Intent(MainActivity.this,Main2Activity.class);
                Person person = new Person();
                person.setFirstName("Rajnish");
                person.setLastName("Suryavanshi");
secondActivityIntent.putExtra("data",person);
                startActivity(secondActivityIntent);

对于检索数据使用:

Person person = (Person)getIntent().getParcelableExtra("data");

推荐阅读