我在代码中创建了一个AsyncTask,如下所示,通过onPublishProgress发布的值是double类型,但在运行时我收到以下发布的logCat错误
请帮我找出导致此错误的原因
代码:
this.mbtnShowComp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mATComputations = new mATComputations();
mATComputations.execute();
}
});
private class mATComputations extends AsyncTask <Void, Double, Void> {
private int mI = 0;
private double mResult;
@Override
protected Void doInBackground(Void... params) {
Log.w(TAG, CSubTag.msg("mATComputations.doInBackground"));
while (!isCancelled()) {
this.mResult += (((++this.mI)/10) * (50));
publishProgress(this.mResult);
}
return null;
}
@Override
protected void onProgressUpdate(Double... values) {
super.onProgressUpdate(values);
Log.w(TAG, CSubTag.msg("mATComputations.onProgressUpdate"));
mtvComputations.setText(""+(values[0]));
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.w(TAG, CSubTag.msg("mATComputations.onPostExecute"));
}
@Override
protected void onCancelled() {
super.onCancelled();
Log.w(TAG, CSubTag.msg("mATComputations.onCancelled"));
}
}
logcat的
FATAL EXCEPTION: AsyncTask #2
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: Process: com.example.com.bt_11, PID: 953
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground()
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at android.os.AsyncTask$3.done(AsyncTask.java:300)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.Void[]
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at com.example.com.bt_11.ActConnect2$mATComputations.doInBackground(ActConnect2.java:1902)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java:288)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-14 10:59:47.220 953-1958/com.example.com.bt_11 E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
答案 0 :(得分:1)
这会对您有所帮助:Object[] cannot be cast to Void[] in AsyncTask。
基本上,您的getWindowManager
类和引用名称中可能有错误(它们是否相同?)或者您将mATComputations
变量声明为mATComputations
而不是您自己的类。
请将您的AsyncTask
课程重命名为具有适当的资本名称(例如ATComputations)。
实例化和执行任务应如下所示:
mATComputations