Android在完成声明之前没有等待数据库响应

时间:2014-04-03 16:59:11

标签: android

我有一个有趣的问题,我之前从未遇到过编程问题。我有一个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:success,这应该将Bool设置为false。

感谢。

1 个答案:

答案 0 :(得分:0)

MobDBResponseListener正在另一个线程上执行。这里发生的是处理被拆分,而一个线程在进行查询,你添加了监听器的主线程,直接跳到验证。最好的办法是将验证放在MobDBResponse方法的MobDBResponseListener中。 尝试调试代码和调用,Listener可能正在使用异步任务。如果是这样,您可以从响应方法中执行任何操作,因为它将再次在主线程中执行。否则,您应该查看处理线程执行的解决方案,如Handlers