Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Utilizar JSONArray en otra clase?

Tengo una ruleta que carga el nombre de los clientes en el menú desplegable.

El spinner obtiene la cadena de una matriz JSON. También tengo algunas vistas de texto donde el nombre, dirección, número de teléfono del cliente seleccionado debe cargar cuando cambia la selección de hilanderos.

Sin embargo, el JSONArray se utiliza en otra clase, ¿cómo puedo usar el JSONArray en otra clase? (¿Cómo puedo cargar los datos correctos del cliente cuando cambia la selección del hilador?)

Este mi código:

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) { } } } 

Esto es lo que parece el 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" } ] } 

(Sólo 2 "clientes", ya que sus datos ficticios)

  • Introduce datos en la base de datos desde la aplicación de Android a través del servicio web.
  • Android: Convertir secuencia a cadena sin quedarse sin memoria
  • Android JSONObject vs GSON
  • En caché JSON de webservice en android - patrón?
  • ¿Cómo utilizar BLOB con JSON y PHP?
  • Cómo analizar JSON Array dentro de otro JSON Array en Android
  • Determine si JSON es un JSONObject o JSONArray
  • JSON Array iteration en Android / Java
  • 4 Solutions collect form web for “¿Utilizar JSONArray en otra clase?”

    Puede convertir el JsonArray a cadena de la siguiente manera:

     String jsonString = jsonArray.toString(); 

    Guardarlo en la preferencia compartida:

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

    Y luego acceder a ella en otra clase.

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

    Una vez que haya obtenido el String, convertirlo de nuevo a JsonArray:

     JsonArray jsonArray = new JsonArray(jsonString); 

    Si desea utilizar a través de diferentes componentes, otra opción es utilizar Parcelable Interface. La siguiente es una clase Pojo con nombre de elementos y job_title que se ha convertido en un objeto que se puede pasar a través de intents utilizando la interfaz 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]; }}; } 

    Puede rellenar la clase pojo haciendo lo siguiente

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

    Y enviarlo a la intención ext por este

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

    Recuperar los datos en la siguiente intención siguiendo los pasos siguientes

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

    Puede guardar su json en un archivo y luego puede buscarlo en otra clase o en cualquier lugar como este:

    Clase para gestionar el almacenamiento y la recuperación de datos:

     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; } } 

    Para guardar json en un archivo utilice RetriveandSaveJSONdatafromfile.objectToFile(obj) y para obtener datos del uso del archivo

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

    1) puede obtener la intsance de la otra clase en su mainactivity y pasar los datos json como una respuesta de cadena

    2) Utilice el escucha de la difusión y el servicio. Escriba su respuesta de json en un servicio y envíela de vuelta a la actividad principal usando una intención de difusión. El receptor de difusión en su actividad principal puede escuchar el servicio, que tiene los datos de json. También actualice las vistas de texto.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.