在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
因为我得到了投票,如果您认为它不应该发生或者它是否适合您,请阅读此内容。
values
变量被初始化,之后重新使用这个变量,因为跳过的两行假定初始化它,并且当它不应该调用后面的语句sql.update()。当它跳过它时两个第一行,它使用未正确初始化的值更新数据库,我可以清楚地看到我手动检查数据库的时间。 所以问题不在于调试器:数据库在数据库中的设置方式证明了DEBUGGER是正确的,当它说条件错误时应用程序运行SQL更新语句。所以是:当条件为假时,应用程序在if条件下运行语句的第三行。 编辑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);
}
}
答案 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
}
希望它会对你有所帮助。