[Android]对象无法强制转换为java.lang.String Asynctask

时间:2015-04-04 01:04:11

标签: java android android-asynctask

我遇到了这个错误。

  

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();
        }
    }
}`

2 个答案:

答案 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();