如果条件破坏:当条件为假时进入并跳过行

时间:2015-10-29 04:11:58

标签: java android algorithm if-statement android-studio

在Android上用java编程,我现在面临一个非常奇怪的问题。

这基本上是我的条件:

ContentValues values = null;
boolean condition=((!(name.equals(stateString))) && (!(stateString.equals(""))));

     if(condition)
     {
                   // UPDATE STATE NAME INTO DB
                  values = new ContentValues();
                  values.put("state_name", stateString);
                  sql.update("STATE", values, "_id=" + state, null);
     }

问题是,当condition为假时,IDE无论如何都会进入该状态,并且它会跳过前两行。

基本上,它不是跳过语句,而是直接转到:

sql.update("STATE", values, "_id=" + state, null);

即使condition为假......

我不知道为什么会这样。我试图使条件更简单,但问题仍然存在。我还检查了一个可能;我可能会忘记一个条件,但一切似乎都很好。

我必须补充一点,AsyncTask过程中doInBackground会发生这种情况。我使用的是android-studio。

任何帮助将不胜感激!

编辑2

因为我得到了投票,如果您认为它不应该发生或者它是否适合您,请阅读此内容。

  • 首先,在API调用(使用HttpsURLConnection)后,它在AsyncTask上运行
  • 然后,我在此之前运行国家名单的相同程序(在为州执行之前)。这里values变量被初始化,之后重新使用这个变量,因为跳过的两行假定初始化它,并且当它不应该调用后面的语句sql.update()。当它跳过它时两个第一行,它使用未正确初始化的值更新数据库,我可以清楚地看到我手动检查数据库的时间。 所以问题不在于调试器:数据库在数据库中的设置方式证明了DEBUGGER是正确的,当它说条件错误时应用程序运行SQL更新语句。所以是:当条件为假时,应用程序在if条件下运行语句的第三行。
  • 然后,使用sqlcipher加密数据库。顺便提一下,这个数据库已经填充并随应用程序一起提供。 这是在背景更新过程中发生的
  • 最后,清除代码,重建代码,重新启动IDE,使缓存无效等......并没有给出任何令人满意的结果。

编辑1

以下条件是完整代码。它被称为循环。

if (state != -1) {
                        sql.close();
                        sql = db.getWritableDatabase(password);
                        // UPDATE STATE IF CHANGES
                        String query = "SELECT state_name,state_local_name,state_country FROM STATE WHERE _id=" + state;
                        Cursor cursor = sql.rawQuery(query, null);
                        if (cursor != null && cursor.moveToFirst())
                        {
                            ContentValues values = null;
                            String name=cursor.getString(cursor.getColumnIndex("state_name"));
                            String localName=cursor.getString(cursor.getColumnIndex("state_local_name"));

                            // UPDATE NAME
                            try {

                                if((!(name.equals(stateString))) && (!(stateString.equals(""))))
                                {
                                    // UPDATE STATE NAME INTO DB
                                    values = new ContentValues();
                                    values.put("state_name", stateString);
                                    sql.update("STATE", values, "_id=" + state, null);
                                }
                            } catch (NullPointerException e) {
                                Log.i("APP", "err3");
                            }
                            // UPDATE LOCAL NAME
                            try {
                                if((!(localName.equals(local_state)))&&(!(local_state.equals(""))))
                                {   // UPDATE STATE LOCAL NAME INTO DB
                                    values = new ContentValues();
                                    values.put("state_local_name", local_state);
                                    sql.update("STATE", values, "_id=" + state, null);
                                }
                            } catch (NullPointerException e) {
                                Log.i("APP", "err4");
                            }
                            // UPDATE COUNTRY
                            try {
                                if((cursor.getInt(cursor.getColumnIndex("state_country"))) != country && country != -1)
                                {
                                    // UPDATE COUNTRY ID FOR STATE INTO DB
                                    values = new ContentValues();
                                    values.put("state_country", country);
                                    sql.update("STATE", values, "_id=" + state, null);
                                }
                            } catch (NullPointerException e) {
                                Log.i("APP", "err5");
                            }
                        }
                        if (cursor != null) cursor.close();

                        // STATE ID VALUE FOR STATION UPDATE
                        newValues.put("station_state", state);
                    } else {
                        if (!stateString.equals("") || !local_state.equals("") || country != -1) {

                            sql.close();
                            sql = db.getWritableDatabase(password);
                            // INSERT NEW STATE IN DB
                            ContentValues values = new ContentValues();
                            if (!stateString.equals("")) values.put("state_name", stateString);
                            if (!local_state.equals(""))
                                values.put("state_local_name", local_state);
                            if (country != -1) values.put("state_country", country);
                            sql.insert("STATE", null, values);

                            // GET NEW STATE ID
                            state = MyDb.getIdStateFromName(db, stateString);
                            newValues.put("station_state", state);
                        }

                    }

2 个答案:

答案 0 :(得分:0)

如果条件有错误条件并且跳过代码,则无法进入。上面提到的情况通常发生在未加载代码的情况下,请停止应用程序保存并清理构建代码并运行应用程序。

答案 1 :(得分:-1)

试试这段代码:

 ContentValues values;

    boolean condition = ((!name.equals(stateString)) && (!stateString.isEmpty())) // Changes in Condition


         if(condition)
         {
                // do your code when condition is equal to true

                       // UPDATE STATE NAME INTO DB
                      values = new ContentValues();
                      values.put("state_name", countryString);
                      sql.update("STATE", values, "_id=" + state, null);
         }else{
                 // do your code when condition is equal to false
         }

希望它会对你有所帮助。