java.lang.Class <.... ViewModel> не имеет конструктора с нулевым аргументом - PullRequest
0 голосов
/ 30 декабря 2018

Я реализую ViewModel с фабрикой ViewModel и получил сбои на некоторых устройствах из-за сбоев в firebase.

приложение не падает, когда я тестирую на своих устройствах.

вот часть кодасвязанные с ViewModel:

в действии (фабрика с кинжалом 2):

myViewModel = ViewModelProviders.of(this, myViewModelFactory).get(MyViewModel.class);

фабрика:

public static class MyViewModelFactory implements ViewModelProvider.Factory {
    private final MyRepository myRepository;

    @Inject
    public MyViewModelFactory(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

    @NonNull
    @Override
    @SuppressWarnings("unchecked")
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        if (modelClass.isAssignableFrom(MyViewModel.class)) {
            return (T) new MyViewModel(myRepository);
        }
        throw new IllegalArgumentException("Unknown ViewModel class");
    }
}

конструктор модели представления:

public class MyViewModel extends ViewModel {

    ...

    public MyViewModel(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

    ...

}

исключение, которое я получаю:

Caused by java.lang.InstantiationException: java.lang.Class<....MyViewModel> has no zero argument constructor
       at java.lang.Class.newInstance(Class.java)
       at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:152)
       at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:211)
       at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:135)
       at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:103)
       at .....MyActivity.onCreate(MyActivity.java:140)
       at android.app.Activity.performCreate(Activity.java:7023)
       at android.app.Activity.performCreate(Activity.java:7014)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2870)
       at android.app.ActivityThread.-wrap11(Unknown Source)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1601)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:172)
       at android.app.ActivityThread.main(ActivityThread.java:6590)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

есть идеи, что может вызвать проблему?

Спасибо

1 Ответ

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

У меня был очень похожий сбой.Проблема заключалась в том, что мне не удалось указать ViewModelProvider.Factory в некоторых моих звонках на ViewModelProviders.of(...).Это на самом деле работало нормально, пока система не разрушила мою деятельность;вот когда произошла авария.

Параметр «Не сохранять действия» в настройках разработчика был очень полезен для отладки.

...