Android: Ошибка при попытке спарсить JSON: Failed to invoke public com.example.walker.activewithretrofit.model.Category() with no args

353
19 сентября 2017, 06:36

Ошибка при попытке спарсить JSON: Failed to invoke public com.example.walker.activewithretrofit.model.Category() with no args
Я хочу использовать retrofit 2 + active android ORM, но я хочу использовать всего один класс модели для этих двух библиотек.

Если в своей модели я НЕ наследуюсь от com.activeandroid.Model, то JSON парсится с помощью Retrofit нормально, а если я наследуюсь, то выходит такая ошибка (в названии темы).
Как объединить использование двух библиотек в одном классе и при этом не получать ошибку?

Мой код: MainActivity.java

public class MainActivity extends AppCompatActivity {
    public static final String DEBUG = "DEBUG";
    private ArrayList<Category> categoryList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        categoryList = new ArrayList<>();
        //ПАРСИМ JSON
        ApiService api = RetroClient.getApiService();
        Call<List<Category>> call = api.getMyJSON();
        call.enqueue(new Callback<List<Category>>() {
            @Override
            public void onResponse(Call<List<Category>> call, Response<List<Category>> response) {
                Log.d(DEBUG, "Я в onResponse ");
                if (response.isSuccessful()) {
                    categoryList.addAll(response.body());
                    Log.d(DEBUG, categoryList.get(0).getImageUrl());
                } else {
                    Log.d(DEBUG, "Я в onResponse - ELSE ");
                }
            }
            @Override
            public void onFailure(Call<List<Category>> call, Throwable t) {
                Log.d(DEBUG, "Я в onFailure " + t.getMessage());
            }
        });
    }
}

ApiService.java и RetroClient.java

public interface ApiService {
    @GET("menuserver5/categories")
    Call<List<Category>> getMyJSON();
}
public class RetroClient {
    private static final String ROOT_URL = "http://139.59.164.239:8080/";

    private static Retrofit getRetrofitInstance() {
        return new Retrofit.Builder()
                .baseUrl(ROOT_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    public static ApiService getApiService() {
        return getRetrofitInstance().create(ApiService.class);
    }
}

Category.java - думаю тут проблема

@Table(name = "Categories")
public class Category extends Model {
    @SerializedName("id")
    @Expose
    private int id;
    @Column(name = "titleRu")
    @SerializedName("titleRu")
    @Expose
    private String titleRu;
    @Column(name = "titleEng")
    @SerializedName("titleEng")
    @Expose
    private String titleEng;
    @Column(name = "url")
    @SerializedName("url")
    @Expose
    private String url;
    @Column(name = "imageUrl")
    @SerializedName("imageUrl")
    @Expose
    private String imageUrl;
    @Column(name = "weight")
    @SerializedName("weight")
    @Expose
    private int weight;
    @Column(name = "menuId")
    @SerializedName("menuId")
    @Expose
    private int menuId;
    @Column(name = "status")
    @SerializedName("status")
    @Expose
    private int status;
    public Category() {
    }
    //GETTERS AND SETTERS - не стал сюда заливать, чтобы не было лишнего кода

Стек трейс ошибки:

09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err: java.lang.RuntimeException: Failed to invoke public com.example.walker.activewithretrofit.model.Category() with no args
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:116)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:116)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at java.lang.Thread.run(Thread.java:818)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.activeandroid.TableInfo.getIdName()' on a null object reference
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at com.activeandroid.Model.<init>(Model.java:55)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at com.example.walker.activewithretrofit.model.Category.<init>(Category.java:0)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at java.lang.reflect.Constructor.newInstance(Native Method)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:     at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:108)
09-18 17:15:12.902 11692-11692/com.example.walker.activewithretrofit W/System.err:  ... 14 more

Моя цель: скачивание JSON'a с сервера, загрузка данных в SQLite и отображение в RecyclerView.

Answer 1

Вот суть вашей ошибки:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.activeandroid.TableInfo.getIdName()' on a null object reference
     at com.activeandroid.Model.<init>(Model.java:55)

А вот причина, вторая строка конструктора, mTableInfo равно null в вашем случае

public Model() {
    mTableInfo = Cache.getTableInfo(getClass());
    idName = mTableInfo.getIdName();
}

https://github.com/pardom/ActiveAndroid/blob/master/src/com/activeandroid/Model.java

Если собрались использовать ActiveAndroid, прочтите документацию и проинициализируйте фреймворк как положено.

READ ALSO
Как исправить ошибку в программе?

Как исправить ошибку в программе?

Почему программа даже при правильных ответах ставит оценку 2(1) и говорит "Правильных ответов - 0, неправильных ответов 7"Как это исправить?

204
Java выпадает элемент &lt;List&gt;

Java выпадает элемент <List>

Добрый деньЕсть хеш объектов вида:

196
Как изменить формат даты в jhipster?

Как изменить формат даты в jhipster?

Дата в моем проекте

213
Вопрос по методу DateTimeFormatter.ofPattern?

Вопрос по методу DateTimeFormatter.ofPattern?

Мне необходимо преобразовать строку с датой в объект LoacalDate чтобы с ним дальше работатьПостоянно появляется сообщение: Exception in thread "main" java

176