在我的java代码中,按钮点击时有一个事件,它执行一些操作,如下所示
onclick->asynctask[openreader]>如果(未打开,返回)->否则继续处理onclick
实际发生的事情是单击一个按钮,比如说需要在该单击中处理一个方法,但是在启动该进程之前,我必须执行/检查位于该进程启动和异步任务之间的openreader,所以,当我单击openreader call initiated并在它完成之前,会发生什么情况?在启动之后,我的进程不应该在asynctask完成之前启动,现在如果我通过while循环等待asynctask完成,它会挂起gui,那么现在这个问题的可能解决方案是什么?

@Override
public void onClick(View v) {

    logMsg("....", R.color.GREEN);
    String phNum = phoneNumber.getText().toString();

    // Check if phone number is valid
    if (!checkNumber(phNum)) {
        required.setTextColor(Color.RED);
        validNum = false;
        return;
    }

    isReady = false;

    // Prepare device for use
    new openReader().execute();

            // Have to wait for openReader to finish here
            // and then proceed

    int id = v.getId();
    switch (id) {
    case R.id.btnRead:
        flag = 1;
        // Process to be initiated here
        break;
    default:
        break;
    }
}

最佳答案

解决方案:
只需将单击视图的idopenReader类的构造函数一起传递,然后在onPostExecute方法中使用switchcase。
例子:

int id = v.getId();
new openReader(id).execute();

这就是你的openReader课程的样子,
private class openReader extends AsyncTask<Void, Void, Void>
{
      private int selected_v_id;

public openReader(int i) {
        // TODO Auto-generated constructor stub
        selected_v_id= i;
    }

@Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);


               switch (selected_v_id) {
               case R.id.btnRead:
                      flag = 1;
                    // Process to be initiated here
               break;
               default:
               break;
           }


    }


}

编辑:
如果你想清除方法内部的混乱,
你可以这样做,
@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);
        performAction(selected_v_id);
}



private void performAction(int x)
{
               switch (selected_v_id) {
               case R.id.btnRead:
                      flag = 1;
                    // Process to be initiated here
               break;
               default:
               break;
           }

}

我希望这会有帮助!啊!

10-07 19:40