1

フォアグラウンド アクティビティのいくつかの属性を記録するアプリケーションがあります。ローカル DB を使用してデータを保存し、ユーザーが表示を要求すると、この DB からデータを取得してリスト ビューに表示します。GB、ICSで問題なく動作しています。しかし、JellyBean ではデータベース トランザクションは非常に不規則です。空が返されています。この理由を知ることはできません。これは、Samsung young、HTC、Sony Ericson Xperia、Samsung S3 でテストしました。問題は、JB に更新された S3 にあります。以下は logCat トレースです。助けてください。

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
4

1 に答える 1

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;

とても簡単で、今直面しているバグからあなたを守ってくれることを願っています。

于 2013-09-10T14:17:02.240 に答える