我有一个应用程序,它获取数据库上user_id的计数,以检查用户是否存在。
我遇到问题的代码:
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
usernameR = usernameRgt.getText().toString();
emailR = emailRgt.getText().toString();
passwordR = passwordRgt.getText().toString();
repeatR = repeatPassRgt.getText().toString();
new userExistsTask().execute(new ApiConnector());
if ((usernameR == null || usernameR.isEmpty() == true) || (emailR == null || emailR.isEmpty() == true) || (passwordR == null || passwordR.isEmpty() == true) || (repeatR == null || repeatR.isEmpty() == true)) {
Toast.makeText(RegisterActivity.this, "One or more fields are empty!", Toast.LENGTH_SHORT).show();
} else {
if (userExistN == 0) {
Toast.makeText(RegisterActivity.this, "Não existe", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(RegisterActivity.this, "existe", Toast.LENGTH_SHORT).show();
}
}
}
});
它的工作方式我想问题的是调用new userExistsTask().execute(new ApiConnector());
(设置变量userExistsN
值的方法)需要一些时间来执行,而if得到错误的值变量userExistsN
所以有一种方法可以在if和方法调用之间设置延迟吗?
更新
userExistYask()代码:
private class userExistsTask extends AsyncTask<ApiConnector,Long,JSONArray>
{
@Override
protected JSONArray doInBackground(ApiConnector... params) {
// it is executed on Background thread
return params[0].userExists(usernameR);
}
@Override
protected void onPostExecute(JSONArray jsonArray) {
if (jsonArray != null) {
JSONObject json = null;
try {
json = jsonArray.getJSONObject(0);
userExistN = json.getInt("userCount");
System.out.println(userExistN);
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Toast.makeText(RegisterActivity.this, "Null", Toast.LENGTH_SHORT).show();
}
}
}
答案 0 :(得分:3)
为什么不将IF代码放在单独的方法中并从postExecute调用此方法?这保证了在背景方法完成之前不会被调用的方法
答案 1 :(得分:1)
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
}
}, 5000);
答案 2 :(得分:1)
这里有几个问题。即使文本字段为空,您也在调用AsyncTask,这是不需要的。
要解决您的主要问题,只需将需要AsyncTask结果的功能移至onPostExecute()。
这样的事情:
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
usernameR = usernameRgt.getText().toString();
emailR = emailRgt.getText().toString();
passwordR = passwordRgt.getText().toString();
repeatR = repeatPassRgt.getText().toString();
if ((usernameR == null || usernameR.isEmpty() == true) || (emailR == null || emailR.isEmpty() == true) || (passwordR == null || passwordR.isEmpty() == true) || (repeatR == null || repeatR.isEmpty() == true)) {
Toast.makeText(RegisterActivity.this, "One or more fields are empty!", Toast.LENGTH_SHORT).show();
} else {
new userExistsTask().execute(new ApiConnector());
}
}
});
然后你的AsyncTask:
private class userExistsTask extends AsyncTask<ApiConnector,Long,JSONArray>
{
@Override
protected JSONArray doInBackground(ApiConnector... params) {
// it is executed on Background thread
return params[0].userExists(usernameR);
}
@Override
protected void onPostExecute(JSONArray jsonArray) {
if (jsonArray != null) {
JSONObject json = null;
try {
json = jsonArray.getJSONObject(0);
userExistN = json.getInt("userCount");
//change this to Lod.d(Tag, userExistN);
System.out.println(userExistN);
if (userExistN == 0) {
Toast.makeText(getApplicationContext(), "Não existe", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "existe", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Toast.makeText(RegisterActivity.this, "Null", Toast.LENGTH_SHORT).show();
}
}
}
答案 3 :(得分:0)
创建界面
public interface AsyncResponse {
void processFinish(int userExistN);
}
在userExistsTask类中:
private class userExistsTask extends AsyncTask<ApiConnector,Long,JSONArray>
{
public AsyncResponse delegate=null;
@Override
protected JSONArray doInBackground(ApiConnector... params) {
return params[0].userExists(usernameR);
}
:
:
:
}
@Override
protected void onPostExecute(JSONArray jsonArray) {
delegate.processFinish(userExistN);
}
在活动onCreate()
userExistsTask existsTask = new userExistsTask();
existsTask.execute(new ApiConnector());
existsTask.delegate = this;
void processFinish(int userExistN){
if ((usernameR == null || usernameR.isEmpty() == true) || (emailR == null || emailR.isEmpty() == true) || (passwordR == null || passwordR.isEmpty() == true) || (repeatR == null || repeatR.isEmpty() == true)) {
Toast.makeText(RegisterActivity.this, "One or more fields are empty!", Toast.LENGTH_SHORT).show();
} else {
if (userExistN == 0) {
Toast.makeText(RegisterActivity.this, "Não existe", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(RegisterActivity.this, "existe", Toast.LENGTH_SHORT).show();
}
}
}