nullPointerException с модифицированной библиотекой - PullRequest
0 голосов
/ 17 января 2019

Я использую модификацию для доступа к API, но я не могу получить данные этого API

API Link

Мне удалось заставить мой код работать с этим API: ( Это ), но когда я переделываю код для использования предыдущего, я получаю ошибку nullPointer в ActivityMain в первой строке foreach что я использую для отображения результатов.

Код:

MainActivity:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

    UdacityService service = retrofit.create(UdacityService.class);
    Call<CharacterCatalog> requestCatalog = service.listCatalog();

    requestCatalog.enqueue(new Callback<CharacterCatalog>() {
        @Override
        public void onResponse(Call<CharacterCatalog> call, Response<CharacterCatalog> response) {
            if(!response.isSuccessful()){
                Log.e("ERRO", "Erro no servidor (" + response.code() + ")");
            }
            else {
                CharacterCatalog catalog = response.body();
                for (Result c : catalog.results){
                    Log.i("RESULT", String.format("id; %s, name: %s\n",c.id, c.name));

                    for (Origin o : c.origins){
                        Log.i("RESULT", String.format("nome; %s, url: %s\n",o.name, o.url));
                    }
                    Log.i("RESULT", "/////////////////////////////////////////");
                }
            }

        }

        @Override
        public void onFailure(Call<CharacterCatalog> call, Throwable t) {
            Log.e("ERRO", "Verifique a conexão com a internet (" + t.getMessage() + ")");
        }
    });
}}

Interface retofit:

public interface ApiService {
public static final  String BASE_URL = "https://rickandmortyapi.com/api/";

@GET("character")
Call<CharacterCatalog> listCatalog();
}

Список результатов:

public class CharacterCatalog {
public List<Result> results;
}

Результат класса

public class Result {
public String id;
public String name;
public String status;
public String species;
public String gender;

public List<Origin> origins;
}

Класс Происхождение:

public class Result {
public String id;
public String name;
public String status;
public String species;
public String gender;

public List<Origin> origins;
}

Может кто-нибудь помочь мне с этой ошибкой?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Спасибо за помощь, но я решил проблему ... В своем классе я использовал список происхождения, но API возвращает только один объект ... Я только удалил тип List.

0 голосов
/ 17 января 2019

Убедитесь, что вы используете этот формат для своего класса данных

@SerializedName("id")
private Integer id;
@SerializedName("name")
private String name;
@SerializedName("status")
private String status;
@SerializedName("species")
private String species;
@SerializedName("type")
private String type;
@SerializedName("gender")
private String gender;
@SerializedName("origin")
private Origin origin;
@SerializedName("location")
private Location location;
@SerializedName("image")
private String image;
@SerializedName("episode")
private List<String> episode = null;
@SerializedName("url")
private String url;
@SerializedName("created")
private String created;

Проверьте этот URL для создания POJOS: http://www.jsonschema2pojo.org/ И, пожалуйста, убедитесь, что вы действительно подключаетесь к серверу, и убедитесь, что вы получаете 200 ответ от сервера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...