Всем привет, я новичок в этой области. Я сделал запрос на отдых для проекта и получил такой ответ:
{"success":true,"timestamp":1524649444,"base":"EUR","date":"2018-04-25","rates":{"AED":4.486623,"AFN":85.583411,"ALL":128.283655,"AMD":585.986726,"ANG":2.175126,"AOA":270.568194,"ARS":24.745299,"AUD":1.609775,"AWG":2.1 // and so on.
как я могу вставить валюту и его стоимость в arraylist?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fixer_request);
System.out.println("-->rest");
String url = "http://data.fixer.io/api/latest?access_key=7e4976fbeb5d633e337487fea31fd7ca";
RequestQueue requestQueue= Volley.newRequestQueue(this);
JsonObjectRequest objectRequest= new JsonObjectRequest(
Request.Method.GET,
url,
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("rest Response",response.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("rest Response",error.toString());
}
}
);
requestQueue.add(objectRequest);
}




Используйте библиотеку Gson для простого преобразования объекта json в объект Java google-gson
Создайте JSONObject:
JSONObject jObject = new JSONObject(result);
Чтобы получить конкретную строку
String aJsonString = jObject.getString("STRINGNAME");
Чтобы получить конкретное логическое значение
boolean aJsonBoolean = jObject.getBoolean("BOOLEANNAME");
Чтобы получить конкретное целое число
int aJsonInteger = jObject.getInt("INTEGERNAME");
Чтобы получить конкретную длинную
long aJsonLong = jObject.getBoolean("LONGNAME");
Чтобы получить конкретный дубль
double aJsonDouble = jObject.getDouble("DOUBLENAME");
Чтобы получить конкретный массив JSONArray:
JSONArray jArray = jObject.getJSONArray("ARRAYNAME");
Чтобы получить элементы из массива
for (int i=0; i < jArray.length(); i++)
{
try {
JSONObject oneObject = jArray.getJSONObject(i);
// Pulling items from the array
String oneObjectsItem = oneObject.getString("STRINGNAMEinTHEarray");
String oneObjectsItem2 = oneObject.getString("anotherSTRINGNAMEINtheARRAY");
} catch (JSONException e) {
// Oops
}
}
вы можете из http://www.jsonschema2pojo.org/ преобразовать json в базу аннотаций класса java - это чистый код
и вы можете использовать из библиотеки модифицированную базу Gson, легко
или используйте:
JSONArray jArray2 = jArray.getJSONArray("PreFactorHotels");
for (int i = 0; i < jArray2.length(); i++) {
hotelPreFactorModels.add(new HotelPreFactorModel(jArray2.getJSONObject(i).getString("HotelNameE"),
Utility.dateShow(jArray2.getJSONObject(i).getString("HotelChekin"))
, Utility.dateShow(jArray2.getJSONObject(i).getString("HotelChekout")),
jArray2.getJSONObject(i).getString("AdlCount"),
jArray2.getJSONObject(i).getString("ChdCount"),jArray2.getJSONObject(i).getString("RoomTitleFa")));
}
ИСПОЛЬЗОВАНИЕ библиотеки GSON это требует трех шагов
String afikJson = "YOUR JSON...";
Gson gson = new Gson();//create Gson object
//and create Type object with arrayList as a type of data
Type afikListType = new TypeToken<ArrayList<Afik>>(){}.getType();
//map your JSON
List<Afik> afikList = gson.fromJson(afikJson, afikListType);
Вы должны изменить свой ответ JSON следующим образом:
{"success":true,"timestamp":1524649444,"base":"EUR","date":"2018-04-25","rates":[{"currency_name":"AED","currency_value":"4.486623"},{"currency_name":"AFN","currency_value":"85.583411"},{"currency_name":"ALL","currency_value":"128.283655"},{"currency_name":"AMD","currency_value":"585.986726"}]}
В вашем JSON нет массива, из которого вы можете добавить значение в список массивов.
Если вы не можете изменить свой ответ JSON, вам необходимо предварительно объявить все типы валюты в своем списке массивов, а затем соответственно добавить туда валюту.
пожалуйста, проведите небольшое исследование, прежде чем размещать свой запрос. это очень простая вещь. здесь ссылаться - aideafactory.com/…. если у вас возникнут проблемы после этого, вы можете спросить.