5

Tôi đang sử dụng thư viện dagger2. bất cứ khi nào tôi cố gắng chạy dự án của tôi là nói không thể tạo ra thể hiện của lớp mô hình xem.Không thể tạo một thể hiện của ViewModel tùy chỉnh

hoạt động chính mà tôi đang cố gắng để tạo ra một thể hiện

((MovieApplication) getApplication()).getAppComponent().inject(this); 
    mViewModel = ViewModelProviders.of(this).get(MoviesDataViewModel.class); 

lớp Nhà máy của tôi

public class ViewModelFactory implements ViewModelProvider.Factory { 
private MoviesDataViewModel mViewModel; 

@Inject 
public ViewModelFactory(MoviesDataViewModel viewModel) { 
    this.mViewModel = viewModel; 
} 

@Override 
public <T extends ViewModel> T create(Class<T> modelClass) { 
    if (modelClass.isAssignableFrom(MoviesDataViewModel.class)) { 
     return (T) mViewModel; 
    } 
    throw new IllegalArgumentException("Unknown class name"); 
} 

log My

Caused by: java.lang.RuntimeException: Cannot create an instance of class com.moviedata.viewmodel.MoviesDataViewModel 
                   at android.arch.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:145) 
                   at android.arch.lifecycle.ViewModelProviders$DefaultFactory.create(ViewModelProviders.java:143) 
                   at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:128) 
                   at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:96) 
                   at com.moviedata.ui.MainActivity.onCreate(MainActivity.java:28) 
                   at android.app.Activity.performCreate(Activity.java:6321) 
                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426) 
                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2535)  
                   at android.app.ActivityThread.access$1100(ActivityThread.java:154)  
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396)  
                   at android.os.Handler.dispatchMessage(Handler.java:102)  
                   at android.os.Looper.loop(Looper.java:148)  
                   at android.app.ActivityThread.main(ActivityThread.java:5582)  
                   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)  
                  Caused by: java.lang.InstantiationException: java.lang.Class<com.moviedata.viewmodel.MoviesDataViewModel> has no zero argument constructor 
                   at java.lang.Class.newInstance(Native Method) 

Trả lời

3

Thay vì:

mViewModel = ViewModelProviders.of(this).get(MoviesDataViewModel.class); 

Thực hiện:

mViewModel = ViewModelProviders.of(this, viewModelFactory).get(MoviesDataViewModel.class); 
+0

thanku @azizbekian .. –

Các vấn đề liên quan