2016-09-09 3 views
0

Я могу вставить данные в SQLite, а затем заполнить данные ListView.Приложения замораживаются при обновлении данных в SQLite

Но всякий раз, когда я пытаюсь обновить данные моего телефона будет заморозить и мне нужно снова открыть приложение, чтобы продолжить

Это происходит также на других устройствах, а это значит, что есть что-то в моем коде, которые вызывают морозильную

Мои Java коды для обновления данных

boolean editContent(){ 
    SQLiteDatabase db = myDb.getWritableDatabase(); 

    ContentValues contentValues = new ContentValues(); 
    contentValues.put(myDb.COL_NAME, savedName.getText().toString()); 
    contentValues.put(myDb.COL_IP, savedIP.getText().toString()); 
    contentValues.put(myDb.COL_PORT, savedPort.getText().toString()); 
    contentValues.put(myDb.COL_USER_ID, savedUserID.getText().toString()); 
    contentValues.put(myDb.COL_USER_PASS, savedUserPass.getText().toString()); 

    //db.update(myDb.TABLE_NAME, contentValues , "ID=" + thisID, null); // problem 
    db.update(myDb.TABLE_NAME, contentValues , "ID = '"+ thisID +"'", null);// solution 

    if (editContent() == true){ 
     Toast.makeText(editActivity.this, "Edit Done!", Toast.LENGTH_SHORT).show(); 
     return true; 
    }else{ 
     Toast.makeText(editActivity.this, "Edit failed!", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 
} 

только LogCat я получаю, если я подожду некоторое время İŞ

09-09 16:42:14.896 8903-8918/app.my.my W/art: Suspending all threads took: 29.860ms 
09-09 16:42:14.922 8903-8924/app.my.my I/art: Background sticky concurrent mark sweep GC freed 23583(1062KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 125MB/127MB, paused 21.123ms total 75.895ms 
09-09 16:42:17.671 8903-8924/app.my.my I/art: Background sticky concurrent mark sweep GC freed 13051(586KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 126MB/127MB, paused 19.706ms total 84.816ms 
09-09 16:42:19.058 8903-8924/app.my.my I/art: Background sticky concurrent mark sweep GC freed 7133(319KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 126MB/127MB, paused 19.733ms total 71.671ms 
09-09 16:42:20.202 8903-8924/app.my.my I/art: Background sticky concurrent mark sweep GC freed 3855(171KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 126MB/127MB, paused 20.306ms total 70.792ms 
09-09 16:42:20.668 8903-8924/app.my.my I/art: Background partial concurrent mark sweep GC freed 4903(287KB) AllocSpace objects, 3(37MB) LOS objects, 4% free, 88MB/92MB, paused 20.672ms total 133.448ms 
09-09 16:42:31.064 8903-8924/app.my.my I/art: Background sticky concurrent mark sweep GC freed 48833(2MB) AllocSpace objects, 0(0B) LOS objects, 2% free, 90MB/92MB, paused 25.972ms total 112.428ms 
09-09 16:42:36.098 8903-8924/app.my.my I/art: Background partial concurrent mark sweep GC freed 23981(1084KB) AllocSpace objects, 0(0B) LOS objects, 4% free, 91MB/95MB, paused 28.538ms total 150.916ms 
09-09 16:42:36.098 8903-8923/app.my.my I/art: WaitForGcToComplete blocked for 34.288ms for cause HeapTrim 

ответ

0

Я не знаю, почему, но большую часть времени я нашел решение моей проблемы после того, как я отправляю вопрос о SO

проблема была здесь

db.update(myDb.TABLE_NAME, contentValues , "ID = '"+ thisID +"'", null);// solution 

if (editContent() == true){ 
    Toast.makeText(editActivity.this, "Edit Done!", Toast.LENGTH_SHORT).show(); 
    return true; 
}else{ 
    Toast.makeText(editActivity.this, "Edit failed!", Toast.LENGTH_SHORT).show(); 
    return false; 
} 

, которые мне удалось решить, выполнив это

int isUpdated = db.update(myDb.TABLE_NAME, contentValues , "ID = '"+ thisID +"'", null);// solution 

if (isUpdated > 0){ 
    Toast.makeText(editActivity.this, "Edit Done!", Toast.LENGTH_SHORT).show(); 
    return true; 
}else{ 
    Toast.makeText(editActivity.this, "Edit failed!", Toast.LENGTH_SHORT).show(); 
    return false; 
} 

кажется editContentboolean была причиной для замораживания

0

Кажется, что вы создаете бесконечный цикл. то есть editContent() будет продолжать звонить editContent() и, следовательно, никогда не покидает функцию. И да, как вы это решили, это правильный путь.