AsyncTask不会处理double类型的数据

时间:2016-01-14 10:05:17

标签: android multithreading android-asynctask

我在代码中创建了一个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) 

1 个答案:

答案 0 :(得分:1)

这会对您有所帮助:Object[] cannot be cast to Void[] in AsyncTask

基本上,您的getWindowManager类和引用名称中可能有错误(它们是否相同?)或者您将mATComputations变量声明为mATComputations而不是您自己的类。

请将您的AsyncTask课程重命名为具有适当的资本名称(例如ATComputations)。

实例化和执行任务应如下所示:

mATComputations