Retrofit null response и call

252
23 декабря 2019, 09:50

Всем привет, проблема связанна не знаю сам с чем, пытался сделать супер-легкое приложение с retrofit 2 на андроиде и столкнулся с проблемой что данные не приходят ко мне.

Модель приложения

package com.danielstrelnikov.simpleretrofit.Model;
import android.util.Log;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class Model {
    private static Model mInstance;
    private static final String BASE_URL = "https://jsonplaceholder.typicode.com";
    private Retrofit mRetrofit;
    private Model() {
        mRetrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    public static Model getInstance() {
        if (mInstance == null) {
            mInstance = new Model();
        }
        return mInstance;
    }
    public JSONPlaceHolderApi getJSONApi() {
        Log.d("TAG", "getJSONApi: " + mRetrofit.baseUrl());
        return mRetrofit.create(JSONPlaceHolderApi.class);
    }
}

Интерфейс для retrofit

package com.danielstrelnikov.simpleretrofit.Model;
import java.util.ArrayList;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface JSONPlaceHolderApi {
    @GET("posts/{id}")
    public Call<Post> getPostWithId(@Path("id") int id);
    @GET("posts")
    public Call<ArrayList<Post>> getAllPost();
}

Класс для получения инфы

package com.danielstrelnikov.simpleretrofit.Model;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Post {
    @SerializedName("userId")
    @Expose
    private Integer userId;
    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("title")
    @Expose
    private String title;
    @SerializedName("body")
    @Expose
    private String body;
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getBody() {
        return body;
    }
    public void setBody(String body) {
        this.body = body;
    }
}

тут вот вылетает null на body и call

package com.danielstrelnikov.simpleretrofit.Presenter;
import com.danielstrelnikov.simpleretrofit.Model.Model;
import com.danielstrelnikov.simpleretrofit.Model.Post;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class Presenter {
    String sPost = "";
    int showPost = 0;
    private String getPost(int id){
        Model.getInstance()
                .getJSONApi()
                .getPostWithId(id)
                .enqueue(new Callback<Post>() {
            @Override
            public void onResponse(Call<Post> call, Response<Post> response) {
                Post post = response.body();
                sPost += post.getTitle() + "\n"
                        + post.getBody() + "\n"
                        + post.getId() + "\n"
                        + post.getUserId();
            }
            @Override
            public void onFailure(Call<Post> call, Throwable t) {
                sPost = "";
                sPost = "Error occurred while getting request!";
                t.printStackTrace();
            }
        });
        return sPost;
    }
    public String setPostOnView(){
        return getPost(showPost);
    }

}

Ошибка из лога

      --------- beginning of crash
03-27 13:34:28.951 1820-1820/com.danielstrelnikov.simpleretrofit E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.danielstrelnikov.simpleretrofit, PID: 1820
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.danielstrelnikov.simpleretrofit.Model.Post.getTitle()' on a null object reference
        at com.danielstrelnikov.simpleretrofit.Presenter.Presenter$1.onResponse(Presenter.java:22)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:71)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Если навести мышку на Call или Response в методе enqueue

Not annotated parameter overrides @EverythingIsNonNull parameter more... (Ctrl+F1)

Совсем не понимаю в чем проблема так как только начал учить retrofit 2, спасибо за помощь

READ ALSO
Что используется в java для выявления багов

Что используется в java для выявления багов

Подскажите пожалуйста для тестирования в c# используется DebugLog()И Console

197
Уведомления на значках андроид

Уведомления на значках андроид

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

200
Тесты для функции

Тесты для функции

Есть функция для работы с переменной (полем) “Возраст студента”КАК спроектировать для этой функции любые кейсы (тесты) для верификации?

228
Как заставить героя двигаться в нужном направлении?

Как заставить героя двигаться в нужном направлении?

Пишу небольшой 2D шутер, на данный момент герой поворачивается в ту сторону куда смотрит мышь, не могу понять как сделать так чтобы он двигался...

193