如果结果已经可用,则启动异步任务并仅在单击按钮时才执行操作,否则等待结果然后执行操作
Starting an async task and make an action only when button clicked if result already available otherwise wait for result and then make action
我有这段代码可以在后台进行异步调用,显示进度条并在单击按钮时启动另一个 activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
// ....
actionButton.setOnClickListener(this);
// call action here
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.actionButton) {
setProgressVisibility(VISIBLE);
new MyActivity.ActionTask().execute(action);
}
}
private void getAction(Action action) {
try {
Call<Action> getAction = api.callAction(model, action);
Response<Action> response = getAction.execute();
setProgressVisibility(INVISIBLE);
if (response.isSuccessful() && response.body() != null) {
startAction(response.body());
} else {
runOnUiThread(() -> showToast(R.string.error, this));
logger.error(getResources().getString(R.string.error));
}
} catch (IOException e) {
runOnUiThread(() -> showToast(e.getMessage(), this));
logger.error(e.getMessage());
setProgressVisibility(INVISIBLE);
}
}
private void startAction(Action action) {
Intent intent = new Intent(this, ActionActivity.class);
intent.putExtra("action", action);
startActivity(intent);
}
private class ActionTask extends AsyncTask<Action, Void, Action> {
@Override
protected Action doInBackground(Action... action) {
getAction(action[0]);
return action[0];
}
}
我想在 OnCreate 中显示第一个 activity 时立即启动异步调用,以便用户在单击按钮时看起来更快。因此异步调用在 activity 创建后立即开始,然后当用户单击按钮时如果结果已经可用,则下一个 activity 开始,否则显示进度条直到有结果可用,一旦结果准备就绪,第二个 activity 开始。最好的方法是什么?
onCreate: 开始任务
AsyncTask:当任务完成时,检查用户是否已经点击了按钮。如果是,开始下一个activity。如果不是,则存储任务的结果,或者如果不需要结果则只存储一个标志。
onClick: 检查任务是否完成。如果是,开始下一个activity。如果没有,则显示进度指示器,并设置一个标志,指示用户已单击该按钮。
我有这段代码可以在后台进行异步调用,显示进度条并在单击按钮时启动另一个 activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
// ....
actionButton.setOnClickListener(this);
// call action here
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.actionButton) {
setProgressVisibility(VISIBLE);
new MyActivity.ActionTask().execute(action);
}
}
private void getAction(Action action) {
try {
Call<Action> getAction = api.callAction(model, action);
Response<Action> response = getAction.execute();
setProgressVisibility(INVISIBLE);
if (response.isSuccessful() && response.body() != null) {
startAction(response.body());
} else {
runOnUiThread(() -> showToast(R.string.error, this));
logger.error(getResources().getString(R.string.error));
}
} catch (IOException e) {
runOnUiThread(() -> showToast(e.getMessage(), this));
logger.error(e.getMessage());
setProgressVisibility(INVISIBLE);
}
}
private void startAction(Action action) {
Intent intent = new Intent(this, ActionActivity.class);
intent.putExtra("action", action);
startActivity(intent);
}
private class ActionTask extends AsyncTask<Action, Void, Action> {
@Override
protected Action doInBackground(Action... action) {
getAction(action[0]);
return action[0];
}
}
我想在 OnCreate 中显示第一个 activity 时立即启动异步调用,以便用户在单击按钮时看起来更快。因此异步调用在 activity 创建后立即开始,然后当用户单击按钮时如果结果已经可用,则下一个 activity 开始,否则显示进度条直到有结果可用,一旦结果准备就绪,第二个 activity 开始。最好的方法是什么?
onCreate: 开始任务
AsyncTask:当任务完成时,检查用户是否已经点击了按钮。如果是,开始下一个activity。如果不是,则存储任务的结果,或者如果不需要结果则只存储一个标志。
onClick: 检查任务是否完成。如果是,开始下一个activity。如果没有,则显示进度指示器,并设置一个标志,指示用户已单击该按钮。