我正在尝试使用AsyncTask通过套接字发送一个对象,但是我收到了这个错误(我只是发布了它的重要部分):
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
Process: com.mitorapps.beberconmemes, PID: 6418
java.lang.RuntimeException: An error occurred while executing doInBackground()
Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to com.mitorapps.beberconmemes.data.Persona[]
at com.mitorapps.beberconmemes.conexion.Enviar_Persona$MyATaskCliente.doInBackground(Enviar_Persona.java:47)
这是我的角色类(我要发送的对象):
package com.mitorapps.beberconmemes.data;
import java.io.Serializable;
public class Persona implements Serializable{
private String Name_Persona;
String Mac_Address;
public Persona(String name_persona, String mac_address) {
this.Name_Persona = name_persona;
this.Mac_Address = mac_address;
}
public String getMac_Address() {
return this.Mac_Address;
}
public String getName_Persona() {
return this.Name_Persona;
}
public void setName_Persona(String name_Persona) {
this.Name_Persona = name_Persona;
}
}
这是我的客户类(名为Enviar_persona):
package com.mitorapps.beberconmemes.conexion;
public class Enviar_Persona extends Cliente{
private AsyncTask myATaskYW;
public Enviar_Persona(Context context){
super(context);//the client class forces to receive a context
SERVERPORT=5000;
}
@Override
public void enviar_persona(Persona p){//Method Called from view
this.myATaskYW = new MyATaskCliente();
this.myATaskYW.execute(p);
}
public void update_view(String s){//To update the State of an element on UI
TextView resp = (TextView) ((Activity)c).findViewById(R.id.resp);
resp.setText(s);
}
//AsyncTask class
class MyATaskCliente extends AsyncTask<Persona, Void, String> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
System.out.println("OnPreExecute");
progressDialog = new ProgressDialog(c);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setTitle("Connecting to server");
progressDialog.setMessage("Please wait...");
progressDialog.show();
}
@Override
protected String doInBackground(Persona... persona) {
try {
//here i'm using an static ip
Socket socket = new Socket("192.168.1.7", SERVERPORT);
//Object Send to server
ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
output.writeObject(persona[0]);
//Response recivied from server
InputStream stream = socket.getInputStream();
byte[] len=new byte[256];
stream.read(len,0,256);
String received = new String(len,"UTF-8");
socket.close();
return received;
} catch (UnknownHostException ex) {
return ex.getMessage();
} catch (IOException ex) {
return ex.getMessage();
}
}
@Override
protected void onPostExecute(String value) {
progressDialog.dismiss();
update_view(value);
}
}
}
我使用AsyncTask在主要活动上完成它并且它完美地运行,但是现在我需要将我的代码分组在不同的类中我得到了错误
答案 0 :(得分:2)
而不是使用
AsyncTask myATaskYW;
使用
MyATaskCliente myATaskYW;
因为AsyncTask
是通用的,所以签名被Object[]
数组替换,但您需要使用特定的实现。
注意:Person[]
不是Object[]