#java #android #arrays #json
#java #Android #массивы #json
Вопрос:
Я получаю JSONArray с сервера, я создаю новый Jsonarry с Jsonobject, который я хочу отправить другому действию, я получил его в другом действии, когда я получаю данные из 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));
}
Комментарии:
1. можете ли вы публиковать журналы ошибок
2. org.json.JSONException: значение Tikka Mehal в 0 типа java.lang. Строка не может быть преобразована в JSONObject это была ошибка
Ответ №1:
Возможно, исключение связано с тем, что вы просто помещаете строку в массив json, а не объект json, и в своем следующем действии вы пытаетесь получить JSONObject из массива, которого там нет, вы можете внести следующие изменения
else
{
JSONObject jsonObject = new JSONObject(s);
Intent intent = new Intent(context,RestaurantFoodItemActivity.class);
intent.putExtra("restaurant_names",jsonObject .toString());
context.startActivity(intent);
}
если вы сохраняете тот же код во втором действии, он должен работать
Комментарии:
1. org.json.JSONException: значение Tikka Mehal в 0 типа java.lang. Строка не может быть преобразована в JSONObject это была ошибка
2. Я меняю его со строки на (сериализуемый)
3. это не работает, когда я удаляю toString вы скажете мне, как я отправляю Jsonobject, используя intent
4. вам не нужно удалять toString ; просто удалите цикл for и передайте jsonObect как есть во второе действие
5. Я использую цикл for, потому что я извлекаю массив json с сервера, поэтому я получаю все данные и добавляю их в новый массив json
Ответ №2:
Почему вы не используете HashMap?
Например, при отправке намерения:
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("key", "value");
Intent intent =
new Intent(this, MyOtherActivity.class);
intent.putExtra("map", hashMap);
startActivity(intent);
А затем в принимающем действии:
HashMap<String, String>
hashMap = (HashMap<String, String>)intent.getSerializableExtra("map");
Редактировать
Прочитав ваш комментарий, я считаю, что лучшим подходом является использование базы данных и сохранение вашей информации после ее получения, а затем использование их во втором действии
Комментарии:
1. У меня есть несколько объектов, и каждый объект имеет три значения, поэтому
Ответ №3:
Используйте разделяемый или сериализуемый интерфейс. Попробуйте инкапсулировать данные json в некоторый объект Restaurant, который реализует Parcelable. Пример :
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");
Комментарии:
1. здесь мне нужен объект с нулевым индексом всех данных, тогда объекту с индексом 2 нужны все данные
2. org.json.JSONException: значение Tikka Mehal в 0 типа java.lang. Строка не может быть преобразована в JSONObject это была ошибка Я также пытаюсь получить данные из JSONArray, но не работает
3. вы хотите отправить список данных?