Alk*_*gam 4 java android android-asynctask
在我的应用程序中,我为gcm ccs(xmpp)运行这些代码,代码显示以下错误执行时发生错误doinbackground.excute()
这是代码:
sendTask = new AsyncTask<String, String, String>() {
protected String doInBackground(String... title) {
Bundle data = new Bundle();
data.putString("ACTION", action);
data.putString("CLIENT_MESSAGE", "Hello GCM CCS XMPP!");
String id = Integer.toString(ccsMsgId.incrementAndGet());
try {
Log.d("RegisterActivity", "messageid: " + id);
gcm.send(SENDER_ID + "@gcm.googleapis.com", id,
data);
Log.d("RegisterActivity", "After gcm.send successful.");
} catch (IOException e) {
Log.d("RegisterActivity", "Exception: " + e);
e.printStackTrace();
}
return "Sent message.";
}
protected void onPostExecute(String result) {
sendTask = null;
// tosat about the success in return
}
};
sendTask.execute(null, null, null);
Run Code Online (Sandbox Code Playgroud)
mar*_*inj 14
你是如何sendTask申报的?我想它只是AsyncTask sendTask;,如果是这样,那么改为:
AsyncTask<String, String, String> sendTask;
Run Code Online (Sandbox Code Playgroud)
此异常的原因类似于以下代码中出现的异常:
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;
Run Code Online (Sandbox Code Playgroud)
java中的varArgs是作为数组实现的,所以当你声明sendTask时,AsyncTask<String, String, String>编译器会调用你的doInBackgroundwith 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5013 次 |
| 最近记录: |