I ma trying to populate Spinner from ArrayList where I stored my JSON response.
I cant figure out how to do that. I need spinner with list of items and when item is selected to be able to get values for that item.
Thanks a lot.
@Override
protected void onPostExecute(Void aVoid) {
ArrayAdapter<ArrayList<HashMap<String,String>>> adapter = new ArrayAdapter<>(
MainActivity.this, android.R.layout.simple_spinner_item, array.size());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
super.onPostExecute(aVoid);
}
Changed it to :
@Override
protected void onPostExecute(Void aVoid) {
ArrayAdapter<ArrayList<HashMap<String,String>>> adapter = new ArrayAdapter<ArrayList<HashMap<String, String>>>(
MainActivity.this, android.R.layout.simple_spinner_item, Collections.singletonList(valutetList));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
super.onPostExecute(aVoid);
}
And now i get only one item like:
{"currency_code": "AUD", "median_rate": "4.634211", "selling_rate": "4.648114", "buying_rate": "4.620308", "unit_value": 1}
My full code :
public class MainActivity extends AppCompatActivity {
private String TAG = MainActivity.class.getSimpleName();
ArrayList<HashMap<String, String>> valutetList;
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = findViewById(R.id.spFrom);
valutetList = new ArrayList<>();
new getRates().execute();
}
private class getRates extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(MainActivity.this, "Json Data is downloading", Toast.LENGTH_LONG).show();
}
@Override
protected Void doInBackground(Void... voids) {
HttpHandler httpHandler = new HttpHandler();
String url = "http://hnbex.eu/api/v1/rates/daily/?date=2018-05-05";
String jsonStr = httpHandler.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) try {
JSONArray valute = new JSONArray(jsonStr);
for (int i = 0; i < valute.length(); i++) {
HashMap<String, String> map = new HashMap<>();
JSONObject jsonobject = valute.getJSONObject(i);
String code = jsonobject.getString("currency_code");
String selling = jsonobject.getString("selling_rate");
String buying = jsonobject.getString("buying_rate");
String median = jsonobject.getString("median_rate");
String value = jsonobject.getString("unit_value");
map.put("currency_code", code);
map.put("selling_rate", selling);
map.put("buying_rate", buying);
map.put("median_rate", median);
map.put("unit_value", value);
valutetList.add(map);
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
});
}
else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG).show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
ArrayAdapter<ArrayList<HashMap<String, String>>> adapter = new ArrayAdapter<>(
MainActivity.this, android.R.layout.simple_selectable_list_item, Collections.singletonList(valutetList));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
super.onPostExecute(aVoid);
}
}
}
I don't know how to populate spinner.