2016-12-30 10 views
1

GraphViewDataPoint[]配列を含むライブラリコードを使用しています。 私のコードには、olddbという名前のデータベースも含まれています。このデータベースは、以下のコードに配列の長さを挿入するために使用します。 最初の2つのforループはデータベースの値を配列に追加するためのもので、3番目のforループは配列arrayWeightarrayIdから値を取得し、それらをDataPoint[]配列に追加します。DataPoint配列に値を追加すると、実行中にアプリケーションがクラッシュする

プログラムを実行した後に何かが間違っているように見えますが、アプリケーションがクラッシュする原因を突き止めることができますか?ここで

private DataPoint[] getDataPoint() { 
     if (olddb.check()) { 
      List<oldDetails> details = olddb.getDetails(); 
      double[] arrayWeight = new double[olddb.getDetailsCount()]; 
      int[] arrayId = new int[olddb.getDetailsCount()]; 
      for (oldDetails cn : details) { //Adding weights and id of all time to an array. 
       double num = cn.getWeight(); 
       int id = cn.getId(); 
       for (int i = arrayWeight.length; i > 0; i--) { 
        arrayWeight[i] = num; 
        arrayId[i] = id; 
       } 
      } 
      DataPoint[] dp = new DataPoint[olddb.getDetailsCount()]; 
      for (int i = 0; i < arrayId.length; i++) { 
       for (int j = 0; j < arrayWeight.length; j++) 
        dp[i] = new DataPoint(i, arrayWeight[j]); 
      } 

      return dp; 
     } 
     else { 
      DataPoint[] dp = new DataPoint[]{ 
        new DataPoint(0, 0) 
      }; 
      return dp; 
     } 
    } 

DataPoint、アレイの動作するコードの例です:

private DataPoint[] getDataPoint(){ 
    DataPoint[] dp = new DataPoint[]{ 
       new DataPoint(0,1), 
       new DataPoint(2,5), 
       new DataPoint(5,5), 
       new DataPoint(7,4) 
    }; 
    return dp; 
} 

EDIT:ここ はエラーメッセージです:

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.none.myapplication, PID: 3881 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.none.myapplication/com.none.myapplication.MainActivity}: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: SELECT * FROM oldDetails 

Database

+0

それはクラッシュが何であるかLogCatであなたを教えてくれる、それを読むことを学びます:https://developer.android.com/studio/debug/am-logcat.html – Blundell

+0

@Blundell最後にメッセージが見つかりましたhttps://codeshare.io/2EzBo5問題が何であるか分かりません –

+0

'java .lang.IllegalStateException:既に閉じられているオブジェクトを再オープンしようとしました:SQLiteQuery:SELECT * FROM oldDetails'はエラーです。これは 'Databas eHandlerOld.getDetailsCount' line 141 – Blundell

答えて

0

いくつかの調査といくつかのBlundellの助けを借りて、私は問題が確かにclose()でした。私のデータベースのメソッド。 ソリューションは、これにgetDetailsCount()関数を変更したものの:

public long QueryNumEntries() 
{ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    return DatabaseUtils.queryNumEntries(db, TABLE_OLDDETAILS); 
} 

と私のメインの活動ファイルに:

private DataPoint[] getDataPoint() { 
     if (olddb.check()) { 
      List<oldDetails> details = olddb.getDetails(); 
      long c = olddb.QueryNumEntries(); 
      int count = (int) c; 
      Log.d("Count", "equals: " + count); 

     double[] arrayWeight = new double[count]; 
     int[] arrayId = new int[count]; 
     for (oldDetails cn : details) { //Adding weights and id of all time to an array. 
      double num = cn.getWeight(); 
      int id = cn.getId(); 
      Log.d("num", "equals: " + num); 
      Log.d("id", "equals: " + id); 
      for (int i = count; i < 0; i--) { 
       arrayWeight[i] = num; 
       arrayId[i] = id; 
      } 
     } 
     DataPoint[] dp = new DataPoint[count]; 
     for (int i = 0; i < arrayId.length; i++) { 
      for (int j = 0; j < arrayWeight.length; j++) { 
       dp[i] = new DataPoint(arrayId[i], arrayWeight[j]); 
       Log.d("ArrayWeight", "equals: " + arrayWeight[j]); 
       Log.d("ArrayId", "equals: " + arrayId[i]); 
      } 
     } 

     return dp; 
    } 

     DataPoint[] dp = new DataPoint[]{ 
       new DataPoint(0, 0) 
     }; 
     return dp; 
    } 
0

あなたはそれを修正することができます3つのコールをすべてに置き換えるその後、

int count = olddb.getDetailsCount();

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: SELECT * FROM oldDetailsDatabaseHandlerOld.getDetailsCount線141

の内部で起こるエラーです:あなたが問題を理解する必要があるしかし

double[] arrayWeight = new double[count]; 
int[] arrayId = new int[count]; 
DataPoint[] dp = new DataPoint[count]; 

Android SQLite DB When to Close

+0

変更を行った後、このエラーメッセージが表示されてもクラッシュすると言いました。 https://codeshare.io/5Xj8nG –

+0

おそらく 'check()'メソッドの内部でデータベース接続を閉じますか?あなたはこれをしないでください – Blundell

+0

私のデータベース全体:https://codeshare.io/5Obd72 –

関連する問題