AndroidViewModel 没有零参数构造函数。如何解决这个问题?
AndroidViewModel has no zero argument constructor. How to solve this?
我几乎在整个 Internet 上搜索了我的问题,但找不到我需要的答案。
是的。我的问题不是唯一的,但没有答案可以帮助我。
所以我决定自己问。
现在关于问题:
public class AuthActivityViewModel extends AndroidViewModel {
Repository repository;
private LiveData<List<User>> users;
private LiveData<User> user;
public AuthActivityViewModel(@NonNull Application application) {
super(application);
repository = new Repository(application);
}
public LiveData<List<User>> getUsers() {
users = repository.getUsers();
return users;
}
public LiveData<User> getUser(int userId) {
user = repository.getUser(userId);
return user;
}
public void addNewUser(User user) {
repository.insertUser(user);
}
public void updateUser(User user) {
repository.updateUser(user);
}
public void deleteUser(User user) {
repository.deleteUser(user);
}
}
.................................................
public class AuthActivity extends AppCompatActivity implements AuthInteractionListener {
private FragmentManager fragmentManager;
private final ConnectionBroadcastReceiver connectionBroadcastReceiver = new ConnectionBroadcastReceiver();
private int limitOfOnWindowFocusChangedOperationForAuthActivity = 0;
private boolean isActivityRecreated;
AuthActivityViewModel authActivityViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auth);
isActivityRecreated = true;
IntentFilter connectionIntentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectionBroadcastReceiver, connectionIntentFilter);
authActivityViewModel = new ViewModelProvider(this).get(AuthActivityViewModel.class);
}
...
}
..............
错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.findthepikachuupgradeversion2/com.example.android.findthepikachuupgradeversion3.view.AuthActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.android.findthepikachuupgradeversion3.viewmodel.AuthActivityViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3307)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3446)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7548)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.android.findthepikachuupgradeversion3.viewmodel.AuthActivityViewModel
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.example.android.findthepikachuupgradeversion3.view.AuthActivity.onCreate(AuthActivity.java:44)
at android.app.Activity.performCreate(Activity.java:7893)
at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3282)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3446)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7548)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.InstantiationException: java.lang.Class<com.example.android.findthepikachuupgradeversion3.viewmodel.AuthActivityViewModel> has no zero argument constructor
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.example.android.findthepikachuupgradeversion3.view.AuthActivity.onCreate(AuthActivity.java:44)
at android.app.Activity.performCreate(Activity.java:7893)
at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3282)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3446)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7548)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
- 我试图在 class AuthActivityViewModel 中添加一个没有参数的构造函数,但是出现了这个错误
There is no default constructor available in
androidx.lifecycle.AndroidViewModel
建议喜欢
- 确保您的视图模型 class 构造函数是 public.
- 确保您已在生命周期gradle 文件中添加依赖项
不真实。为什么?因为它们已经是它们应该的样子了,但我有不应该的错误。
既然有问题,肯定有我没算到的地方。
这是 gradle 文件的一部分:
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
我该如何解决这个问题?
将以下依赖项添加到 gradle 应用模块级别。
implementation 'androidx.lifecycle:lifecycle-extensions:$lifecycle_version
扩展包括许多库,包括 LiveData
,因此,通过添加它,您可以摆脱:
implementation 'androidx.lifecycle:lifecycle-livedata:$lifecycle_version
But it appears lifecycle-extensions has been deprecated. Is there
another dependency that solves this issue?
没错,已经 deprecated as of version:2.2.0。
lifecycle-extensions Artifact Deprecation: With the above deprecation
of ViewModelProviders.of(), this release marks the deprecation of the
last API in lifecycle-extensions and this artifact should now be
considered deprecated in its entirety. We strongly recommend depending
on the specific Lifecycle artifacts you need (such as
lifecycle-service if you’re using LifecycleService and
lifecycle-process if you’re using ProcessLifecycleOwner) rather than
lifecycle-extensions as there will not be a future 2.3.0 release of
lifecycle-extensions.
如文档所述,您可以改用特定的生命周期工件:正如我们在评论中讨论的那样,有效的特定生命周期工件是:
implementation "android.arch.lifecycle:runtime:$lifecycle_version
并保留您的其他生命周期程序依赖项工件。
我几乎在整个 Internet 上搜索了我的问题,但找不到我需要的答案。 是的。我的问题不是唯一的,但没有答案可以帮助我。 所以我决定自己问。
现在关于问题:
public class AuthActivityViewModel extends AndroidViewModel {
Repository repository;
private LiveData<List<User>> users;
private LiveData<User> user;
public AuthActivityViewModel(@NonNull Application application) {
super(application);
repository = new Repository(application);
}
public LiveData<List<User>> getUsers() {
users = repository.getUsers();
return users;
}
public LiveData<User> getUser(int userId) {
user = repository.getUser(userId);
return user;
}
public void addNewUser(User user) {
repository.insertUser(user);
}
public void updateUser(User user) {
repository.updateUser(user);
}
public void deleteUser(User user) {
repository.deleteUser(user);
}
}
.................................................
public class AuthActivity extends AppCompatActivity implements AuthInteractionListener {
private FragmentManager fragmentManager;
private final ConnectionBroadcastReceiver connectionBroadcastReceiver = new ConnectionBroadcastReceiver();
private int limitOfOnWindowFocusChangedOperationForAuthActivity = 0;
private boolean isActivityRecreated;
AuthActivityViewModel authActivityViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auth);
isActivityRecreated = true;
IntentFilter connectionIntentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectionBroadcastReceiver, connectionIntentFilter);
authActivityViewModel = new ViewModelProvider(this).get(AuthActivityViewModel.class);
}
...
}
..............
错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.findthepikachuupgradeversion2/com.example.android.findthepikachuupgradeversion3.view.AuthActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.android.findthepikachuupgradeversion3.viewmodel.AuthActivityViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3307)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3446)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7548)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.android.findthepikachuupgradeversion3.viewmodel.AuthActivityViewModel
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.example.android.findthepikachuupgradeversion3.view.AuthActivity.onCreate(AuthActivity.java:44)
at android.app.Activity.performCreate(Activity.java:7893)
at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3282)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3446)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7548)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.InstantiationException: java.lang.Class<com.example.android.findthepikachuupgradeversion3.viewmodel.AuthActivityViewModel> has no zero argument constructor
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.example.android.findthepikachuupgradeversion3.view.AuthActivity.onCreate(AuthActivity.java:44)
at android.app.Activity.performCreate(Activity.java:7893)
at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3282)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3446)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7548)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
- 我试图在 class AuthActivityViewModel 中添加一个没有参数的构造函数,但是出现了这个错误
There is no default constructor available in androidx.lifecycle.AndroidViewModel
建议喜欢
- 确保您的视图模型 class 构造函数是 public.
- 确保您已在生命周期gradle 文件中添加依赖项
不真实。为什么?因为它们已经是它们应该的样子了,但我有不应该的错误。 既然有问题,肯定有我没算到的地方。
这是 gradle 文件的一部分:
def lifecycle_version = "2.2.0" implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
我该如何解决这个问题?
将以下依赖项添加到 gradle 应用模块级别。
implementation 'androidx.lifecycle:lifecycle-extensions:$lifecycle_version
扩展包括许多库,包括 LiveData
,因此,通过添加它,您可以摆脱:
implementation 'androidx.lifecycle:lifecycle-livedata:$lifecycle_version
But it appears lifecycle-extensions has been deprecated. Is there another dependency that solves this issue?
没错,已经 deprecated as of version:2.2.0。
lifecycle-extensions Artifact Deprecation: With the above deprecation of ViewModelProviders.of(), this release marks the deprecation of the last API in lifecycle-extensions and this artifact should now be considered deprecated in its entirety. We strongly recommend depending on the specific Lifecycle artifacts you need (such as lifecycle-service if you’re using LifecycleService and lifecycle-process if you’re using ProcessLifecycleOwner) rather than lifecycle-extensions as there will not be a future 2.3.0 release of lifecycle-extensions.
如文档所述,您可以改用特定的生命周期工件:正如我们在评论中讨论的那样,有效的特定生命周期工件是:
implementation "android.arch.lifecycle:runtime:$lifecycle_version
并保留您的其他生命周期程序依赖项工件。