Как получить массив в массив, используя GET методы залпа? - PullRequest
0 голосов
/ 03 сентября 2018

Я использую API Стран для извлечения языковых данных, https://restcountries.eu/rest/v2/all.., но языки не отображаются, потому что данные были в массиве.

это код, который я пишу для извлечения данных с использованием Method.Get

   private void getCountriesList() {

   String url = "https://restcountries.eu/rest/v2/all";

    StringRequest request = new StringRequest(
            Request.Method.GET,
            url,
            new Response.Listener<String>() {

                @Override
                public void onResponse(String response) {

                    if(!response.isEmpty()) {
                        Gson gson = new Gson();
                        JSONObject json = null;
                        // array of country
                        LanguageModel[] countries = gson.fromJson(response, LanguageModel[].class);
                        // add it to adapter
                        for(LanguageModel country: countries) {
                            mAdapter.addItem(country);
                        }


                    }
                }
            },
            new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d(TAG, error.getLocalizedMessage());
                }
            }
    );

    Volley.newRequestQueue(getApplicationContext()).add(request);
}

Это модель. Код был успешным при получении названия страны, но не удалось при получении данных о языке

public class CountryModel {

private String languages;

public String getLanguages() {
    return languages;
}

public void setLanguages(String languages) {
    this.languages = languages;
}}

1 Ответ

0 голосов
/ 03 сентября 2018

Я получил его с помощью следующего кода:

if (!response.isEmpty()) {
                            Gson gson = new Gson();

                            try {
                                JSONArray mainArray = new JSONArray(response);
                                for (int i = 0; i < mainArray.length(); i++) {
                                    JSONObject countryObj = mainArray.getJSONObject(i);
                                    JSONArray languageArray = countryObj.getJSONArray("languages");
                                    List<LanguageModel> languageModels = gson.fromJson(languageArray.toString(), new TypeToken<List<LanguageModel>>() {
                                    }.getType());
                                    // add it to adapter
                                    for (LanguageModel languageModel : languageModels) {
                                        //mAdapter.addItem(country);
                                    }
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                            // array of country

                        }

Дайте мне знать, если вы все еще получаете ошибку.

Редактировать:

а как получить название страны и язык одновременно?

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

public class CountryModel {

    @SerializedName("name")
    String countryName;
    @SerializedName("languages")
    ArrayList<LanguageModel> languages;

    public CountryModel() {
    }
}

и LanguageModel следующим образом:

class LanguageModel {


    @SerializedName("iso639_1")
    String iso1;
    @SerializedName("iso639_2")
    String iso2;
    @SerializedName("name")
    String name;
    @SerializedName("nativeName")
    String nativeName;

    public LanguageModel() {
    }
}

Теперь последнее изменение в разборе:

if (!response.isEmpty()) {
                            Gson gson = new Gson();

                            try {
                                JSONArray mainArray = new JSONArray(response);
                                List<CountryModel> countryList = gson.fromJson(mainArray.toString(), new TypeToken<List<CountryModel>>() {
                                }.getType());

                                //do something with your country list
                                Log.d("R-Countries", countryList.toString());

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }

Пока этот ответ работает, вы должны увидеть следующую ссылку, чтобы понять, что я здесь сделал.

http://www.studytrails.com/java/json/java-google-json-introduction/

...