WorkManager 找不到所需的零参数构造函数
WorkManager cannot find required zero-argument constructor
我正在使用 android.arch.work:work-runtime
依赖项中的 WorkManager
1.0.0-alpha02
每隔一分钟查询一次网页(此示例中排除了查询代码,因为它不相关)。
当我这样使用 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();
从 MessageWorker 中删除以下构造函数并使 class public
。 :
public MessageWorker() {
}
还要确保 class 在单独的文件中。
您可以在单独的文件中创建 MessageWorker class,如果您想将 MessageWorker class 制作成嵌套 class,您也可以制作它 static
:
public static class MessageWorker extends Worker {
@NonNull
@Override
public WorkerResult doWork() {
// Do stuff
return WorkerResult.SUCCESS;
}
}
原因是 WorkerWrapper 将通过 clazz.newInstance()
创建您的 worker 实例,并且嵌套 class
没有零参数构造函数
我正在使用 android.arch.work:work-runtime
依赖项中的 WorkManager
1.0.0-alpha02
每隔一分钟查询一次网页(此示例中排除了查询代码,因为它不相关)。
当我这样使用 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();
从 MessageWorker 中删除以下构造函数并使 class public
。 :
public MessageWorker() {
}
还要确保 class 在单独的文件中。
您可以在单独的文件中创建 MessageWorker class,如果您想将 MessageWorker class 制作成嵌套 class,您也可以制作它 static
:
public static class MessageWorker extends Worker {
@NonNull
@Override
public WorkerResult doWork() {
// Do stuff
return WorkerResult.SUCCESS;
}
}
原因是 WorkerWrapper 将通过 clazz.newInstance()
创建您的 worker 实例,并且嵌套 class