2013-06-11 7 views
1

У меня есть приложение, которое записывает несколько атрибутов активности переднего плана. Я использовал локальную БД для хранения данных, и когда пользователь запрашивает отображение, я извлекаю данные из этой БД и отображаю их в виде списка. Он отлично работает с GB, ICS. Но транзакция базы данных очень неравномерна в JellyBean. Пустой возвращается. Я не могу понять причину этого. Я тестировал это с Samsung Young, HTC, Sony Ericson Xperia и Samsung S3. Проблема связана с S3, где она была обновлена ​​до JB. Ниже приведена трассировка logCat. пожалуйста помоги.Проблема SQLite на Jelly Bean

try { 
     db.open(); 
     Cursor cursor = db.getStartTime(lastAppName); ; 
     if(cursor.moveToFirst()) { 
     do { 
      DiffStart = cursor.getString(0); 
      DiffBright = cursor.getString(1); 
      Log.d("wifiRun","brightness: " +DiffBright); 

      }while(cursor.moveToNext()); 
      } 
      SimpleDateFormat dateFormat = new SimpleDateFormat(
             "HH:mm:ss"); 
      try { 
       Date startTime = dateFormat.parse(DiffStart); 
       Date endTime = dateFormat.parse(EndingTime); 
       diff = (endTime.getTime() - startTime.getTime())/1000; 
       Difference = String.valueOf(diff); 
      try { 
       double brightnessDouble = Double.parseDouble(DiffBright); 
       Log.d("wifiRun","brightnessDouble: " +brightnessDouble); 
       //Do my energy calculation. 
       } catch (NullPointerException npe) { 
       npe.printStackTrace(); 
      } 

          } catch (ParseException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } catch (NullPointerException npe) { 
           npe.printStackTrace(); 
          } 



          db.update(lastAppName, EndingTime, Difference, AppEnergy); 

Cursor cur = db.Select(lastAppName); 
if(cursor.moveToFirst()) { 
            do { 
            testBright = cursor.getString(0); 
Log.d("wifiRun","testBright: " +testBright); 
            testEnergy = cursor.getString(1); 
            Log.d("wifiRun","testEnergy: " +testEnergy); 
            }while(cursor.moveToNext()); 
           } 
     db.close(); 
    } catch (SQLException sql) { 
     sql.printStackTrace(); 
    } 

LogCat выглядит следующим образом:

06-11 12:57:31.258: D/wifiRun(32469): brightness: 171 
06-11 12:57:31.258: D/wifiRun(32469): brightness: null 
06-11 12:57:31.258: D/wifiRun(32469): brightness: null 
06-11 12:57:31.258: D/wifiRun(32469): brightness: 171 
06-11 12:57:31.258: D/wifiRun(32469): brightness: 171 
06-11 12:57:31.258: D/wifiRun(32469): brightness: 171 
06-11 12:57:31.258: D/wifiRun(32469): brightness: 171 
06-11 12:57:31.258: D/wifiRun(32469): brightness: 171 
06-11 12:57:31.258: D/wifiRun(32469): brightness: 171 
06-11 12:57:31.258: D/wifiRun(32469): brightness: 171 
06-11 12:57:31.263: D/wifiRun(32469): brightnessDouble: 171.0 
06-11 12:57:31.263: D/wifiRun(32469): AppEnergy: 13.977 
06-11 12:57:31.268: D/wifiRun(32469): testEnergy: null 
06-11 12:57:31.268: D/wifiRun(32469): testBright: 171 
06-11 12:57:31.268: D/wifiRun(32469): testEnergy: null 
06-11 12:57:31.268: D/wifiRun(32469): testBright: null 
06-11 12:57:31.268: D/wifiRun(32469): testEnergy: null 
06-11 12:57:31.268: D/wifiRun(32469): testBright: null 
06-11 12:57:31.268: D/wifiRun(32469): testEnergy: 313.776 
06-11 12:57:31.268: D/wifiRun(32469): testBright: 171 
06-11 12:57:31.268: D/wifiRun(32469): testEnergy: 313.776 
06-11 12:57:31.268: D/wifiRun(32469): testBright: 171 
06-11 12:57:31.268: D/wifiRun(32469): testEnergy: 2.795 
06-11 12:57:31.268: D/wifiRun(32469): testBright: 171 
06-11 12:57:31.268: D/wifiRun(32469): testEnergy: 36.339 
06-11 12:57:31.268: D/wifiRun(32469): testBright: 171 
06-11 12:57:31.268: D/wifiRun(32469): testEnergy: 6.289 
06-11 12:57:31.268: D/wifiRun(32469): testBright: 171 
06-11 12:57:31.273: D/wifiRun(32469): testEnergy: 0.699 
06-11 12:57:31.273: D/wifiRun(32469): testBright: 171 
06-11 12:57:31.273: D/wifiRun(32469): testEnergy: 13.977 
06-11 12:57:31.273: D/wifiRun(32469): testBright: 171 
+0

Здесь вы можете найти трассировку. – Riser

+0

Я сказал. Как вы можете видеть, он был null много раз. Его лог-кошка пробегала всего 2 секунды. Если вы запустите мое приложение за минуту, появится много нулей. – madhu

+1

Покажите свой код, чтобы начать – Geoffroy

ответ

0

Вы можете сделать это вещи по-другому, столь распространенным также.

Просто создайте все свои базы данных в отдельном классе и добавьте туда все типы методов. А для получения данных из таблицы, вы можете сделать, как показано ниже:

// put all column names in a string array 
    String[] columns = new String[] { ROW_ID, ROW_NAME }; 

    // create the cursor 
    Cursor c = ourDatabase.query(your_table_name, columns, null, null, null, null, null); 
    String result = ""; 
    //fetch the column indexes through the column name.. 
    int iRow = c.getColumnIndex(ROW_ID); 
    int iName= c.getColumnIndex(ROW_NAME); 

    //move the cursor from start to after last one by one and put the data in ur string.. 
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     result += c.getString(iRow) + "\n" + c.getString(iName) + "\n"; 

    // at last return the result for using in your activity.. 
    return result; 

Это очень легко и надеюсь, что это будет безопасно для вас от ошибок, которые вы столкнулись в настоящее время.

Смежные вопросы