WorkManager找不到必需的零参数构造函数

时间:2018-05-31 12:35:27

标签: java android android-workmanager

我使用WorkManager依赖关系中的1.0.0-alpha02 android.arch.work:work-runtime每隔一分钟查询一次网页(此示例中排除了查询代码,因为它'不相关的。)

当我像这样使用WorkManager时:

WorkManager
                .getInstance()
                .enqueue(
                        new PeriodicWorkRequest.Builder(
                                MessageWorker.class,
                                1,
                                TimeUnit.MINUTES
                        )
                                .setConstraints(
                                        new Constraints.Builder()
                                                .setRequiredNetworkType(NetworkType.CONNECTED)
                                                .build()
                                )
                                .build()
                );

private class MessageWorker extends Worker {
        public MessageWorker() {
        }

        @NonNull
        @Override
        public WorkerResult doWork() {
            // Do stuff
            return WorkerResult.SUCCESS;
        }
}

它会显示以下错误消息:

05-31 17:50:05.645 11749-12168/com.neelkamath.webview E/WorkerWrapper: Trouble instantiating com.neelkamath.webview.MainActivity$MessageWorker
    java.lang.InstantiationException: java.lang.Class<com.neelkamath.webview.MainActivity$MessageWorker> has no zero argument constructor
        at java.lang.Class.newInstance(Native Method)
        at androidx.work.impl.WorkerWrapper.workerFromClassName(WorkerWrapper.java:405)
        at androidx.work.impl.WorkerWrapper.workerFromWorkSpec(WorkerWrapper.java:377)
        at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:132)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
05-31 17:50:05.645 11749-12168/com.neelkamath.webview E/WorkerWrapper: Could for create Worker com.neelkamath.webview.MainActivity$MessageWorker

我尝试过以下构造函数无效:

  • 没有构造函数
  • public
  • 私有
  • 具有非空主体的构造函数,其唯一语句为super();

2 个答案:

答案 0 :(得分:2)

从MessageWorker中删除以下构造函数并创建类public。 :

public MessageWorker() {
}

同时确保课程在单独的文件中。

答案 1 :(得分:1)

您可以在单独的文件中创建MessageWorker类,并且如果要将MessageWorker类设为嵌套类,还可以使其成为static

public static class MessageWorker extends Worker {
    @NonNull
    @Override
    public WorkerResult doWork() {
        // Do stuff
        return WorkerResult.SUCCESS;
    }
}

原因是WorkerWrapper将通过clazz.newInstance()创建您的worker实例,并且嵌套类没有零参数构造函数