Как отправить массив JSONArray с объектом JSONObject из одного действия во второе действие

#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. вы хотите отправить список данных?