0

sqliteデータベースからAChartEngineにデータを入力していますが、すべてのデータを表示する必要があります。私が抱えている問題は、レコードを削除すると、削除されたレコードで一連のグラフの入力が停止することです。削除された/空のレコードをスキップして、グラフにデータを入力し続ける方法を見つける必要があります。listviewが削除されたレコードをスキップし、すべての行を表示し続けるのと同じ方法でそれを行う必要があります。私はこれの多くに非常に新しく、これで非常に困難な時間を過ごしています。削除された/空の行をスキップするためにifステートメントを書き込もうとしましたが、何も機能しないようです。助けてくれてありがとう!

私のグラフ作成活動では:

    for (int i = 1; !c.isAfterLast(); i++)  {

         String value1 = db.getValue1(i);
         String value2 = db.getValue2(i);

         c.moveToNext();

         double x7 = Double.parseDouble(value1);
         double y7 = Double.parseDouble(value2);

         myseries.add(x7, y7);  

         }

エラーが発生しています: CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

try and catchで囲むと、削除されたレコードまで行が表示されます。

私のsqliteデータベースの「編集」:

  public String getValue1(long l) {
    String[] columns = new String[]{ EMP_DEPT };
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null);
    if (c != null){
    c.moveToFirst();
    String value1 = c.getString(0);


        return value1;


    }
    return null;
    }






public String getValue2(long l) {
    String[] columns = new String[]{ EMP_DATE1 };
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null);
    if (c != null){
    c.moveToFirst();
    String value2 = c.getString(0);


        return value2;


    }
    return null;
    }
4

2 に答える 2

0

一度にすべての値を取得するには、単一のクエリを使用する必要があります。

SELECT Date1 FROM MyTable WHERE id BETWEEN 1 AND 12345

また:

db.query(EMP_TABLE, columns, EMP_ID + " BETWEEN 1 AND " + ..., ...);

次に、カーソルを反復処理しても、欠損値が表示されません。

于 2013-01-17T23:05:46.370 に答える
0

あなたの問題は、存在しない行に対するコマンドのセーフティネットは、if (c != null){そのブロック内でコマンドを使用して実行することです、クエリからのCursorリクエストは決して表示されずnull、代わりに行のないカーソルオブジェクトになります.

代わりにこれをセーフティネットとして使用するためのより適切なソリューションif (c.moveToFirst()){メソッド自体が、booleanメソッドが最初に実際に実行された場合、つまりtrue移動しfalseた場合とそうでない場合 (移動する行がない場合に発生します) を返すためです。必要に応じて、別のチェックとして、カーソルの行数を確認しますc.getCount()

さらに、データベースに対して冗長なクエリを作成しないように、メソッドを組み合わせる必要があります。

public String[] getValues(long l) {
    String[] results = new String[2]; 
    String[] columns = new String[]{ EMP_DEPT, EMP_DATE1 };
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null);
    if (c.moveToFirst()) {
        results[0] = c.getString(0);
        results[1] = c.getString(1);
    } else {
        Log.d("GET_VALUES", "No results formed from this query!");
    }
    return results;
}
于 2013-01-17T23:06:14.963 に答える