Использовать JSONArray в другом классе?

У меня есть счетчик, который загружает имя клиентов в раскрывающемся списке.

Spinner получает строку из массива JSON. У меня также есть несколько текстовых просмотров, где имя, адрес, номер телефона выбранного клиента должны загружаться при изменении выбора прядильщиков.

Но JSONArray используется в другом классе, как я могу использовать JSONArray в другом классе? (Как я могу загрузить правильную информацию о клиенте при изменении выбора счетчика?)

Этот мой код:

public class Gegevens extends Main { Spinner spCustomers; private JSONObject jsonChildNode; private JSONArray jsonMainNode; private String name; private TextView txtNaam; private TextView txtAdres; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gegevens); new AsyncLoadCustDetails().execute(); spCustomers = (Spinner) findViewById(R.id.spKlanten); spCustomers.setOnItemSelectedListener(new mySelectedListener()); txtNaam = (TextView)findViewById(R.id.txtNaam); } protected class AsyncLoadCustDetails extends AsyncTask<Void, JSONObject, ArrayList<String>> { ArrayList<CustomerDetailsTable> custTable = null; @Override protected ArrayList<String> doInBackground(Void... params) { RestAPI api = new RestAPI(); ArrayList<String> spinnerArray = null; try { JSONObject jsonObj = api.GetCustomerDetails(); JSONParser parser = new JSONParser(); custTable = parser.parseCustomerDetails(jsonObj); spinnerArray = new ArrayList<String>(); //All i can think of is make new array for each value? Log.d("Customers: ", jsonObj.toString()); jsonMainNode = jsonObj.optJSONArray("Value"); for (int i = 0; i < jsonMainNode.length(); i++) { jsonChildNode = jsonMainNode.getJSONObject(i); name = jsonChildNode.optString("Naam"); spinnerArray.add(name); } } catch (Exception e) { Log.d("AsyncLoadCustDetails", e.getMessage()); } return spinnerArray; } @Override protected void onPostExecute(ArrayList<String> spinnerArray) { ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.spinner_item, spinnerArray); spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item); // The drop down view spCustomers.setAdapter(spinnerArrayAdapter); } } public class mySelectedListener implements AdapterView.OnItemSelectedListener { @Override public void onItemSelected(AdapterView parent, View view, int pos, long id) { String value = (String) parent.getItemAtPosition(pos); txtNaam.setText(value); //got the name working since it wasnt that hard //load the other details in the textviews } @Override public void onNothingSelected(AdapterView parent) { } } } 

Вот что выглядит jsonObj:

 { "Successful": true, "Value": [ { "Naam": "Google", "Adres": "Kerkstraat 3", "Postcode": "4455 AK Roosendaal", "Telefoon": "0165-559234", "Email": "info@google.nl", "Website": "www.google.nl" }, { "Naam": "Apple", "Adres": "Kerkstraat 4", "Postcode": "4455 AD Roosendaal", "Telefoon": "0164-559234", "Email": "info@apple.nl", "Website": "www.apple.nl" } ] } 

(Только 2 «клиента», поскольку его фиктивные данные)

Вы можете преобразовать JsonArray в строку следующим образом:

 String jsonString = jsonArray.toString(); 

Сохранить его в общих предпочтениях:

  SharedPreferences settings = getSharedPreferences( "pref", 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("jsonString", jsonString); editor.commit(); 

А затем получить доступ к нему в другом классе.

 SharedPreferences settings = getSharedPreferences( "pref", 0); String jsonString= settings .getString("jsonString", null); 

После того, как вы получили строку, переведите ее обратно в JsonArray:

 JsonArray jsonArray = new JsonArray(jsonString); 

Если вы хотите использовать разные компоненты, другой вариант – использовать Parcelable Interface. Ниже приведен класс Pojo с именем элементов и именем job_title, который был создан как объект, который может быть передан через намерения с использованием интерфейса Parcelable

 public class ContactPojo implements Parcelable{ private String name; private String job_title; public void setName(String name) { this.name = name; } public void setJob_title(String job_title) { this.job_title = job_title; } public String getName() { return name; } public String getJob_title() { return job_title; } private ContactPojo(Parcel parcel){ name=parcel.readString(); job_title=parcel.readString(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeString(name); parcel.writeString(job_title); } public static final Parcelable.Creator<ContactPojo> CREATOR = new Parcelable.Creator<ContactPojo>() { public ContactPojo createFromParcel(Parcel in) { return new ContactPojo(in); } public ContactPojo[] newArray(int size) { return new ContactPojo[size]; }}; } 

Вы можете заполнить класс pojo, выполнив следующее

 ContactPojo contactPojo= new ContactPojo(); contactPojo.setName("name"); contactPojo.setJob_title("name"); 

И отправьте его на намерение

 Intent intent=new Intent(this, DetailView.class); intent.putExtra("Data", contactPojo); 

Получите данные в следующем намерении следующими шагами

 ContactPojo contactPojo=new ContactPojo(); contactPojo=getIntent().getParcelableExtra("Data"); Log.i(AppConstants.APPUILOG, "Name: " + contactPojo.getName() ); 

Вы можете сохранить json в файле, а затем можете получить его в другом классе или где угодно:

Класс для управления сохранением и извлечением данных:

 public class RetriveandSaveJSONdatafromfile { public static String objectToFile(Object object) throws IOException { String path = Environment.getExternalStorageDirectory() + File.separator + "/AppName/App_cache" + File.separator; File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } path += "data"; File data = new File(path); if (!data.createNewFile()) { data.delete(); data.createNewFile(); } ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(data)); objectOutputStream.writeObject(object); objectOutputStream.close(); return path; } public static Object objectFromFile(String path) throws IOException, ClassNotFoundException { Object object = null; File data = new File(path); if(data.exists()) { ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(data)); object = objectInputStream.readObject(); objectInputStream.close(); } return object; } } 

Чтобы сохранить json в файле, используйте RetriveandSaveJSONdatafromfile.objectToFile(obj) и для извлечения данных из файла используйте

  path = Environment.getExternalStorageDirectory() + File.separator + "/AppName/App_cache/data" + File.separator; RetriveandSaveJSONdatafromfile.objectFromFile(path); 

1) вы можете получить intsance другого класса в своей mainactivity и передать данные json в виде строкового ответа

2) Используйте широковещательный прослушиватель и службу. Напишите свой ответ json в службе и отправьте его обратно в mainactivity, используя намерение трансляции. Широковещательный приемник в вашей основной деятельности может прослушивать услугу, в которой есть данные json. Также обновите текст.