Ich habe einen Spinner, der den Namen der Kunden in das Dropdown lädt.Verwenden Sie JSONArray in einer anderen Klasse?
Der Spinner ruft die Zeichenfolge aus einem JSON-Array ab. Ich habe auch ein paar Textviews, wo der Name, die Adresse, die Telefonnummer des ausgewählten Kunden geladen werden sollte, wenn sich die Auswahl der Spinner ändert. ?
Aber die JSONArray ist in einer anderen Klasse verwendet wird, wie kann ich die JSONArray in einer anderen Klasse verwenden (Wie kann ich die richtigen Kundendaten laden, wenn Spinner Auswahl ändert?)
Das ist mein Code:
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) {
}
}
}
Dies ist, was die jsonObj wie folgt aussieht:
{
"Successful": true,
"Value": [
{
"Naam": "Google",
"Adres": "Kerkstraat 3",
"Postcode": "4455 AK Roosendaal",
"Telefoon": "0165-559234",
"Email": "[email protected]",
"Website": "www.google.nl"
},
{
"Naam": "Apple",
"Adres": "Kerkstraat 4",
"Postcode": "4455 AD Roosendaal",
"Telefoon": "0164-559234",
"Email": "[email protected]",
"Website": "www.apple.nl"
}
]
}
(Nur 2 "Kunden", da seine Dummy-Daten)
Sie möchten 'spinnerArray' an andere Aktivitäten senden? –
Wenn Sie zu viele Kunden haben, empfehle ich, eine Datenbank zu erstellen und die Einträge zu speichern. Sie können Bibliotheken von Drittanbietern verwenden, um die Arbeit zu vereinfachen: http://greendao-orm.com oder http://ormlite.com/sqlite_java_android_orm.shtml – MoQ93
Ich erhalte dieses JSON-Array bereits von einer webAPI (die bekommt die Daten aus einer Datenbank) – Yoshi