18
Сен
2017

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

Ошибка при попытке спарсить 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.

Источник: https://ru.stackoverflow.com/questions/719887/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BF%D1%8B%D1%82%D0%BA%D0%B5-%D1%81%D0%BF%D0%B0%D1%80%D1%81%D0%B8%D1%82%D1%8C-json-failed-to-invoke-public-com-example-walker-act

Share

Тебе может это понравится...