Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AndroidViewModel没有零参数构造函数。如何解决这个问题?_Java_Android_Viewmodel - Fatal编程技术网

Java AndroidViewModel没有零参数构造函数。如何解决这个问题?

Java AndroidViewModel没有零参数构造函数。如何解决这个问题?,java,android,viewmodel,Java,Android,Viewmodel,我几乎在整个互联网上搜索了我的问题,却找不到我需要的答案。 对我的问题不是唯一的,但没有答案,这对我有帮助。 所以我决定自己去问 关于这个问题: public class AuthActivityViewModel extends AndroidViewModel { Repository repository; private LiveData<List<User>> users; private LiveData<User> us

我几乎在整个互联网上搜索了我的问题,却找不到我需要的答案。 对我的问题不是唯一的,但没有答案,这对我有帮助。 所以我决定自己去问

关于这个问题:

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) 

如何解决此问题?

将以下依赖项添加到gradle应用程序模块级别

implementation'androidx.lifecycle:生命周期扩展:$lifecycle\u版本

扩展包括许多库,包括
LiveData
,因此,通过添加它,您可以摆脱:

implementation'androidx.lifecycle:lifecycle livedata:$lifecycle\u版本

但生命周期扩展似乎已被弃用。有 解决这个问题的另一个依赖项

这是对的,它一直都是

lifecycle extensions工件弃用:使用上述弃用 对于ViewModelProviders.of(),此版本标记了 生命周期扩展中的最后一个API和这个工件现在应该是 被认为是完全不赞成的。我们强烈建议 在您需要的特定生命周期工件上(例如 生命周期服务,如果您正在使用生命周期服务和 生命周期流程(如果您使用的是ProcessLifecycleOwner),而不是 生命周期扩展,因为未来不会有2.3.0版本的 生命周期扩展

正如文档所引用的,您可以使用特定的生命周期工件:正如我们在评论中所讨论的,特定的生命周期器aritifacts是:

implementation“android.arch.lifecycle:runtime:$lifecycle\u版本


并保留您的其他lifecycler依赖项工件。

当出现此异常时,每次启动您的应用程序?是的。每次。您都可以添加此
实现“androidx.lifecycle:lifecycle extensions$lifecycle\u version
。逻辑上不会更改,但只是以防万一……它可以工作!谢谢。但这有什么帮助呢?
LiveData
扩展中包含的库之一,但它也包含其他库,我怀疑丢失其中任何一个库都可能导致此异常,让我检查一下是否可以找到有关此异常的文档。仅请将“实现”androidx.lifecycle:lifecycle LiveData$lifecycle_version“替换为”实现“androidx.lifecycle:lifecycle livedata:$lifecycle\u version”,我的意思是,你错过了符号“:”。这是我想要给其他用户的,不是给我的。@RubenKubalyan你能添加
implementation“android.arch.lifecycle:runtime:$lifecycle\u version吗“
而不是`扩展名,请参见..”。。保持相同的依赖关系这也解决了我的问题!但它似乎是生命周期的扩展。还有其他依赖项可以解决这个问题吗?@cshadowstar感谢您提出这个。。我真的很感兴趣。。我刚刚更新了答案。。问:安卓工作室是否警告过你们反对,或者你们是从文档中得到的。。。我仍然可以使用它,并且在as 4.0.2中没有任何警告。谢谢你这么做!在AS 4.0.1下,我也没有收到任何警告,当我试图弄清楚为什么这个解决方案能够解决我的问题时,我从文档中得到了这一点。祝你一切顺利:)
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"