java - 如何将带有 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));
}
解决方案
使用 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");
推荐阅读
- bash - Bash 菜单 - 从子菜单返回主菜单?
- azure-devops - 在一台服务器上运行多个为不同组织提供服务的构建代理和部署代理
- angular - 无法在 TimePicker 上访问 NSLocale
- c++ - 不使用windows应用程序的串口通信
- android-architecture-components - 在 android 应用程序中在哪里创建存储库对象?
- docker - 在 Google App Engine 上运行 gcsfuse 时出现问题
- node.js - 在 Heroku CI 环境中通过 CDN 服务 webpack 生成的 CSS 文件
- php - 如何在刀片 laravel 的另一个 foreach 中使用 foreach
- java - 将空字符串解析为 int
- php - PHP - 多维数组合并为一个数组