你是如何sendTask
申报的?我想它只是AsyncTask sendTask;
,如果是这样,那么改为:
AsyncTasksendTask;
此异常的原因类似于以下代码中出现的异常:
Object arr1[] = new Object[] {null,null,null}; String arr2[] = (String[])arr1; // here java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
java中的varArgs是作为数组实现的,所以当你声明sendTask时,AsyncTask
编译器会调用你的doInBackground
with new String[]{null,null,null}
,但当你声明它时,AsyncTask
则doInBackground
调用它new Object[]{null,null,null}
.
由于类型擦除,编译器将添加隐藏的隐式强制Object[]
转换String[]
.这是为了允许以下代码正常工作:
AsyncTask sendTask = ...; Object[] arg = new String[]{null,null,null}; sendTask.execute(arg);