1

次のフィールドを持つ 8 つの列を持つデータベース テーブルがあります。

|_id|flag|HVID|Vname|Vdate|Vtime|Vcost|Vmedicine|

特定の「HVID」に属するすべてのレコードを抽出するために、このデータベースにクエリを実行しています。

public Cursor fetchAllVac(String ID) {

        String Key = ID;
        Cursor mCursor = mDb.query(DATABASE_TABLE1, new String[] { IDx, FLAG,
                HVID1, Vname1, VDate1, Vtime1, Vcost1, Vmedicine1 }, "HVID=?",
                new String[] { Key }, null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

アクティビティでは、カーソルから値をフェッチし、それらを配列リストに格納します。

public void Vacforshare() {
    String B = null;
    ArrayList<String> mArrayList = new ArrayList<String>();
    mCursor = DBHelper.fetchAllVac(IDB);
    if (mCursor.moveToFirst()) {
        do {
            try {
                mArrayList.add(mCursor.getString(mCursor
                        .getColumnIndex("_id")));
                mArrayList.add(mCursor.getString(mCursor
                        .getColumnIndex("flag")));
                mArrayList.add(mCursor.getString(mCursor
                        .getColumnIndex("HVID")));
                mArrayList.add(mCursor.getString(mCursor
                        .getColumnIndex("Vname")));
                mArrayList.add(mCursor.getString(mCursor
                        .getColumnIndex("Vdate")));
                mArrayList.add(mCursor.getString(mCursor
                        .getColumnIndex("Vtime")));
                mArrayList.add(mCursor.getString(mCursor
                        .getColumnIndex("Vcost")));
                mArrayList.add(mCursor.getString(mCursor
                        .getColumnIndex("Vmedicine")));
            } catch (Exception h) {

            }

        } while (mCursor.moveToNext());

    }
    for (int i = 0; i < mArrayList.size(); i++) {
        String G = (mArrayList.get(i));
        B = B + G;
    }
    System.out.println("" + B);

}

B で取得しているのは、冗長な (すべての行) 値の文字列です (私のレコードは複数の行にすることができます)。これらの値を名前と値のペアに分けたいのですが、それを達成する方法について混乱しています。

4

4 に答える 4

3
ArrayList<ArrayList<NameValuePair>> table = new ArrayList<ArrayList<NameValuePair>>();
if (mCursor.moveToFirst()) {
        do {
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            try {
                nameValuePairs.add(new BasicNameValuePair("_id",mCursor.getString(mCursor.getColumnIndex("_id"))));
            //do this for the rest columns...
            //...
            //...

            table.add(nameValuePairs);

            } catch (Exception h) {

            }

        } while (mCursor.moveToNext());

intableあなたは行をArrayListfromとしてNameValuePair持つでしょう

その後、次のような行から値を取得できます

ArrayList<NameValuePair> row = table.get(0);
NameValuePair column = row.get(0);
String columnName = column.getName();
String columnValue = column.getValue();
于 2013-08-01T12:16:10.220 に答える
3

以下のように、1 つのレコードのみの値のリストを持つ新しいクラスを導入できます。

public class Record {
    List<String> values = new ArrayList<String>();

    public List<String> getValues() {
        return values;
    }
}

次に、ループでレコードのリストを入力します。

ArrayList<Record> mArrayList = new ArrayList<Record>();
do {
    try {
        Record record = new Record();
        List<String> values = record.getValues();

        values.add(mCursor.getString(mCursor.getColumnIndex("_id")));
        ...
        mArrayList.add(record);
    } catch (Exception h) {

    }
}

これで、各レコードのフィールド名と値を反復処理して、必要な出力を作成できます。

String[] names = new String[] {"_id", "flag", ....};
for (int i = 0; i < mArrayList.size(); i++) {
    Record record = mArrayList.get(i);

    String current = "";
    List<String> values = record.getValues();
    for (int j = 0; j < values.size(); j++) {
        String fieldName = names[j];
        String s = values.get(j);
        current += " " + fieldName + "=" + s;
    }
    B = B + "[" + current.trim() + "]";
}
System.out.println(B); // will print: [_id=value1 flag=value2 ...][_id=value1 flag=value2 ...] etc
于 2013-08-01T12:22:31.633 に答える
1

B を HashMap の ArrayList にして、ペアを B に格納することができます。ループ内で mCursor からキーを抽出するときに、キーをマップに配置します。B が文字列でなければならない場合は、JSON 形式を使用します。

于 2013-08-01T12:16:57.847 に答える
1

あなたが何をしたいのかは明確ではありません。私があなたの問題を正しい方法で理解している場合、「Vname|Vdate|Vtime|Vcost|VmedicineVname|Vdate|Vtime|Vcost|Vmedicine」のような文字列が得られます

しかし、次のように、すべての行に単一の文字列が必要です。

  1. 文字列 "Vname|Vdate|Vtime|Vcost|Vmedicine"
  2. 文字列 "Vname|Vdate|Vtime|Vcost|Vmedicine"

これが必要な場合は、すべての行を ArrayList に渡し、その ArrayList を ArrayList に渡すことができます。これは次のようになります。

      private ArrayList<ArrayList<String>> doubleArray = new ArrayList<ArrayList<String>>();

そして、DBから値を取得すると:

       ArrayList<String> mArrayList = new ArrayList<String>();
       mArrayList.add(mCursor.getString(mCursor
                    .getColumnIndex("_id")));
            mArrayList.add(mCursor.getString(mCursor
                    .getColumnIndex("flag")));
            mArrayList.add(mCursor.getString(mCursor
                    .getColumnIndex("HVID")));
            mArrayList.add(mCursor.getString(mCursor
                    .getColumnIndex("Vname")));
            mArrayList.add(mCursor.getString(mCursor
                    .getColumnIndex("Vdate")));
            mArrayList.add(mCursor.getString(mCursor
                    .getColumnIndex("Vtime")));
            mArrayList.add(mCursor.getString(mCursor
                    .getColumnIndex("Vcost")));
            mArrayList.add(mCursor.getString(mCursor
                    .getColumnIndex("Vmedicine")));

            doubleArray.add(mArrayList);

したがって、次のように正確に1行を取得できます。

          for(int i=0;i<doubleArray.size();i++){

              String a = doubleArray.get(i)
          // now pass the String wherever You want
         }

しかし、私が言ったように、これがあなたが望むものであるかどうか、あなたの説明からはわかりません...

于 2013-08-01T12:18:03.567 に答える