循环停止,但不会继续下一个语句

时间:2016-10-12 07:04:08

标签: java android mysql

我使用While循环使用Cursor类将SQL表的值添加到ArrayList中,但是在添加所有值的时刻,While循环停止给出值,但同时它没有&# 39;继续下一个陈述。我使用的条件是:如果在While循环中,Cursor有空值,它需要停止(c!= null),它停止但不会继续。我使用Log.i查看我是否在While循环后收到值,但我没有得到任何价值。这是我正在使用的代码:

static ArrayList<String> notes = new ArrayList<>();
static ArrayAdapter arrayAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ListView listView = (ListView) findViewById(R.id.listView);

    try{
        SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase("Notes",MODE_PRIVATE, null);
        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS notes (name VARCHAR)");
        sqLiteDatabase.execSQL("INSERT INTO notes (name) VALUES ('LUIS GA')");
        sqLiteDatabase.execSQL("INSERT INTO notes (name) VALUES ('LUIS')");
        sqLiteDatabase.execSQL("INSERT INTO notes (name) VALUES ('GA')");

        Cursor c = sqLiteDatabase.rawQuery("SELECT * FROM notes", null);
        int nameIndex = c.getColumnIndex("name");
        notes.add("example note");
        c.moveToFirst();
        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, notes);
        listView.setAdapter(arrayAdapter);
        int i = 0;
        Log.i("Bucefalo", Integer.toString(i));

        while(c != null){
            Log.i("Dato",c.getString(nameIndex));
            notes.add(c.getString(nameIndex));
            c.moveToNext();
            i++;
            Log.i("Luis", Integer.toString(i));
        };
        i = 2;
        Log.i("Napoleon", Integer.toString(i));
        String Hercules = "Hercules";
        Log.i("Hercules",Hercules);
    }
    catch (Exception e){

        e.printStackTrace();

    }

我使用Log.i在Logcat中收到的值是&#34; Bucefalo&#34;和#34; Luis&#34; (在While循环中的那个),但我没有收到价值&#34;拿破仑&#34;和&#34; Hercules&#34;,为什么?我怎么解决这个问题?谢谢

4 个答案:

答案 0 :(得分:2)

这是迭代光标的最佳方式

if (newService.info_requires[i] === undefined) {
    newService.info_requires[i] = {};
}
newService.info_requires[i].name = (service.info_requires[i].name);

答案 1 :(得分:2)

除了错误使用游标之外,这段代码

while(c != null){
  ...
  c.moveToNext();
}

实际上永远不会停止循环。

您会看到:您有一个本地参考 c 。它是不为空。在 上调用方法绝对不能将引用本身变为 null 。只有像c = null这样的作业才能到达那里。

换句话说:您发布的代码不支持您对观察到的行为的声明。

答案 2 :(得分:0)

JSON.stringify(elementArray);返回一个布尔值,但同时它继续并移动光标。

像这样使用,

moveToNext

Cursor c = sqLiteDatabase.rawQuery(....);
while (c.moveToNext()) {

}

答案 3 :(得分:0)

您的while循环中存在语法错误。应该低于

while (expression)
{
 statemets(s)
}

而且你使用光标很糟糕。

你可以使用

cur.moveToFirst();
    while (cur.isAfterLast() == false) {
        .............
        ............
        cur.moveToNext();
    }
    cur.close();


Cursor cursor = db.rawQuery(...); if (cursor.moveToFirst()) { do { ...
} while (cursor.moveToNext()); }

Cursor cursor = db.rawQuery(...);
 try {
while (cursor.moveToNext()) {
    ...
}
} finally {
cursor.close();
}