在我的java代码中,我在按钮点击时有一个事件,它执行一些操作,这些操作位于
之下OnClick - > AsyncTask [OpenReader] - > if(not open,return) - >否则继续执行onClick
实际发生的是单击一个按钮,说有一个方法需要在该单击中处理,但在启动该进程之前,我必须执行/检查实际处于该进程启动之间的openReader并且是一个AsyncTask ,所以当我点击openReader调用启动时,在此之前启动我的进程,直到完成AsyncTask后才开始,现在如果我等待AsyncTask通过while循环完成它挂起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;
}
}
答案 0 :(得分:3)
见AsyncTask.onPostExecute()。放置在此方法中AsyncTask完成后需要运行的任何代码。
答案 1 :(得分:1)
<强>解决方案:强>
只需将您点击的视图id
与openReader
类的构造函数一起传递,然后在onPostExecute
方法中使用switch
大小写。
示例:强>
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;
}
}
}
修改强>
如果你想清除onPostExecute
方法中的混乱,
你可以做这样的事情,
@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;
}
}
我希望它会有所帮助!!