получение файла json с помощью retrofit2

У моего MainActivity есть базовый URL-адрес, я пытаюсь получить файл json с сервера, используя модификацию.

Вот часть кода в MainActivity

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.action_get_data) {
            if (isOnline()) {
                requestData();

            } else {
                Toast.makeText(this, "Network isn't available", Toast.LENGTH_LONG).show();
            }
        }
        return false;
    }

    private void requestData() {

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(ENDPOINT)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        FlowersAPI service = retrofit.create(FlowersAPI.class);
        Call<List<Flower>> call = service.getFeed();

        call.enqueue(new Callback<List<Flower>>() {
            @Override
            public void onResponse(Call<List<Flower>> call, Response<List<Flower>> response) {
                         flowerList = response.body();
                updateDisplay();
            }

            @Override
            public void onFailure(Call<List<Flower>> call, Throwable t) {

            }

        });

    }

    protected void updateDisplay() {
        //Use FlowerAdapter to display data
        FlowerAdapterPicaso adapter = new FlowerAdapterPicaso(this,
                R.layout.item_flower, flowerList);
            setListAdapter(adapter);
    }

А вот мой интерфейс

public interface FlowersAPI {

    @GET("/feeds/flowers.json")
    public Call<List<Flower>> getFeed();

}

Я не могу получить результат, т.е. нет данных в списке, каждый другой пример показывает модернизацию из предыдущих версий, и мой другой вопрос: Обязательно ли добавлять GsonConverterFactory.


person Ajax -the Max    schedule 01.04.2016    source источник
comment
Я использую последнюю версию модификации, и нужно ли использовать OkHttpClient, как показано в некоторых других примерах?   -  person Ajax -the Max    schedule 01.04.2016
comment
Unable to create converter ... Почему вы прокомментировали GsonConverterFactory?   -  person OneCricketeer    schedule 01.04.2016
comment
даже использование GsonConverterFactory выдает мне ошибку - java.lang.NoClassDefFoundError: Не удалось разрешить: Lcom/google/gson/Gson; at retrofit2.converter.gson.GsonConverterFactory.create(GsonConverterFactory.java:42) at com.hanselandpetal.catalog.MainActivity.requestData(MainActivity.java:69)   -  person Ajax -the Max    schedule 01.04.2016
comment
Это означает, что вы не полностью прочитали документацию, чтобы включить com.squareup.retrofit2:converter-gson в качестве зависимости.   -  person OneCricketeer    schedule 01.04.2016
comment
Нет, я добавил файл jar зависимостей, перед добавлением файла jar класс GsonCovertorFactory не распознан   -  person Ajax -the Max    schedule 01.04.2016
comment
После того, как я добавил зависимость, только она скомпилировалась.   -  person Ajax -the Max    schedule 01.04.2016
comment
Подождите, вы используете файлы Gradle или JAR?   -  person OneCricketeer    schedule 01.04.2016
comment
Сначала я попытался скомпилировать с помощью gradle, студия Android выдала мне ошибку, затем я искал в репозитории maven и нашел конвертер-gson.jar и добавил банку   -  person Ajax -the Max    schedule 01.04.2016
comment
Вы также добавили JAR-файл Gson в качестве зависимости? Это нужно для того, чтобы использовать конвертер. Или вы могли бы показать свой файл Gradle и ошибку, с которой вы столкнулись, и я мог бы помочь с этим.   -  person OneCricketeer    schedule 01.04.2016
comment
нет, я не добавлял GSON, но после добавления GSON в gradle я не получаю никаких данных. Я также обновил свой вопрос. Пожалуйста, помогите.   -  person Ajax -the Max    schedule 02.04.2016


Ответы (1)


В вашем коде вам не хватает HTTP-клиента для запросов перед созданием службы API.

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(ENDPOINT)
        .addConverterFactory(GsonConverterFactory.create())
        .client(new OkHttpClient.Builder().build())
        .build();
person Aitor Viana    schedule 02.04.2016