我遇到了这个错误。
java.lang.ClassCastException:java.lang.Object []无法强制转换为 java.lang.String中[]
这是完整的代码。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edTenDangNhap =(EditText) findViewById(R.id.edTenDangNhap);
edMatKhau =(EditText) findViewById(R.id.edMatKhau);
btnDangKi =(Button) findViewById(R.id.btnDangKi);
btnDangNhap =(Button) findViewById(R.id.btnDangNhap);
btnDangNhap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String tentk = edTenDangNhap.getText().toString();
String matkhau = edMatKhau.getText().toString();
// ==== I execute AsyncTask there
AsyncTask dangnhap = new AsyncDangNhap();
dangnhap.execute(tentk,matkhau); // IDE announce there : JDK 5.0 only. Unchecked to call execute Params ...
}
});
}
public class AsyncDangNhap extends AsyncTask<String[], Void, Integer>{//error there
@Override
protected Integer doInBackground(String[]... params) {
WebService sv = new WebService();
int kiemtra = sv.KiemTraDangNhap(params[0],params[1]);
return kiemtra;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(getApplicationContext(),"Dang xu li ... !",Toast.LENGTH_LONG).show();
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if(result >0){
//Dang nhap thanh cong
Toast.makeText(getApplicationContext(),"Dang nhap thanh cong !",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"Dang nhap that bai !",Toast.LENGTH_LONG).show();
}
}
}`
答案 0 :(得分:1)
在String[]
和String
方法中将AsyncTask
更改为doInBackground
,因为当前在dangnhap.execute
方法中传递字符串而非String Array.like:
public class AsyncDangNhap extends AsyncTask<String, Void, Integer>{
@Override
protected Integer doInBackground(String... params) {
.....
}
....
}
答案 1 :(得分:1)
如异常中所述,您正在尝试将字符串传递给异步任务对象的超类异步任务执行方法,该方法采用对象的varag(可变长度参数,基本上是一个数组)。
要解决此问题,只需替换行
AsyncTask dangnhap = new AsyncDangNhap();
使用
AsyncDangNhap dangnhap = new AsyncDangNhap();