[英]Android not waiting for DB response before finishing statement
我有一个有趣的问题,以前从未在编程中遇到过。 我有一个onClickListener,它执行很多用户名和密码检查(确保用户名正确长度,未使用等)。 我正在使用MobDB,并且正在使用条件语句,如果用户名已经存在,该条件语句将返回一行。 问题在于,侦听器会跳过数据库,并进行最终检查,如果一切正常,则将新的用户名和密码发布到我的数据库中。 在跳转到最后检查之前,如何使它等待数据库的响应?
以下是相关代码:
usernamecheck3 = true;
MobDB.getInstance().execute(APP_KEY, null, rd, null, false, new MobDBResponseListener() {
@Override public void mobDBSuccessResponse() {
usernamecheck3 = false;
Log.e("mobdbSuccess:", "success");
}
@Override public void mobDBResponse(Vector<HashMap<String, Object[]>> row) {
}
@Override public void mobDBResponse(String jsonObj) {
/*Log.e("mobdbSuccess:", "jsonObj");
Log.e("mobdbSuccess:", jsonObj);
JSONObject mainObject;
try {
mainObject = new JSONObject(jsonObj);
// need to parse the json object.
} catch (JSONException e1) {
e1.printStackTrace();
} */
}
@Override public void mobDBFileResponse(String fileName, byte[] fileData) {
//get file name with extension and file byte array
}
@Override public void mobDBErrorResponse(Integer errValue, String errMsg) {
usernamecheck3 = false;
Log.e("doesnt", "work");
}
});
if(usernamecheck3 == false){
Toast.makeText(getApplicationContext(), "Username is taken, please choose another", Toast.LENGTH_SHORT).show();
}
基本上检查总是返回true,然后logcat会说mobdbSuccess:成功,应该将Bool设置为false。
谢谢。
MobDBResponseListener正在另一个线程上执行。 这里发生的是,处理被拆分了,而线程正在执行查询,即在其上添加了侦听器的主线程就直接跳到了验证。 最好的选择是将验证放在mobDBResponse方法的MobDBResponseListener中。 尝试调试代码和调用,侦听器可能正在使用异步任务。 如果是这样,您可以通过response方法执行任何操作,因为它将在主线程中再次执行。 否则,您应该查看处理线程执行的解决方案,例如Handlers。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.