0

こんにちは、私は Android 開発の初心者です。私が抱えている問題は、テーブルを正常に作成してテーブルにデータを追加できることですが、データベースからデータを取得できず、arraylist は常に null 値を返します。私を助けてください :-)

public class DatabaseHandler extends  SQLiteOpenHelper
{
// All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "BloodPressureRecorder";

    // Bloodpressure table name
    private static final String TABLE_BLOOD_PRESSURE = "BloodPressure";

    // Bloodpressure Table Columns names
    private static final String KEY_SYS = "sys";
    private static final String KEY_DIA = "dia";
    private static final String KEY_RATE = "rate";
    SQLiteDatabase db;


    public DatabaseHandler(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating tables
@Override
public void onCreate(SQLiteDatabase db) 
{
    String CREATE_BLOODPRESSURE_TABLE = "CREATE TABLE " + TABLE_BLOOD_PRESSURE +                            
           "(" + KEY_SYS + " INTEGER," + KEY_DIA + " INTEGER, "
            + KEY_RATE + " INTEGER" +  ")";
            db.execSQL(CREATE_BLOODPRESSURE_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{
    // Drop older table if existed
           db.execSQL("DROP TABLE IF EXISTS " + TABLE_BLOOD_PRESSURE);

           // Create tables again
           onCreate(db);

}

// Adding new blood pressure
public void addBloodPressure(BloodPressureResult bloodPressure)
{
    SQLiteDatabase db = this.getReadableDatabase();

            ContentValues values = new ContentValues();
            values.put(KEY_SYS, bloodPressure.getSys()); // Systolic
            values.put(KEY_DIA, bloodPressure.getDia()); // Diastolic
            values.put(KEY_RATE, bloodPressure.getRate()); // Rate

            // Inserting Row
            db.insert(TABLE_BLOOD_PRESSURE, null, values);
            db.close(); // Closing database connection
}



// Getting all bloodpressures

public List<BloodPressureResult> getAllBloodPressure()
{
    List<BloodPressureResult> bloodP = new ArrayList<BloodPressureResult>();

    String selectQuery = "SELECT * FROM " + TABLE_BLOOD_PRESSURE;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if(cursor.moveToFirst())
    {
        do
        {
    BloodPressureResult bloodPressureResult = new BloodPressureResult();
    bloodPressureResult.setSys(Integer.parseInt(cursor.getString(0)));      
    bloodPressureResult.setDia(Integer.parseInt(cursor.getString(1)));                 
    bloodPressureResult.setRate(Integer.parseInt(cursor.getString(2)));     

    bloodP.add(bloodPressureResult);    

        }while(cursor.moveToNext());
    }
    cursor.close();
    return bloodP;
   }


   }
4

3 に答える 3

0

最初に気付くのはgetString、カーソルから整数を取得しようとしているということです。を使用する必要がありますgetInt

第 2 に、プライマリ インデックスである "_id" 列がないため、返されるカーソルは標準のアダプターでは機能しません。「_id」列がカーソルにあることを期待し、必要とします。

于 2012-05-28T07:05:52.913 に答える
0

これを試してください、私はあなたのためにそれを変更します

public List<BloodPressureResult> getAllBloodPressure(){




List<BloodPressureResult> bloodP = new ArrayList<BloodPressureResult>();


final String[] columns = new String[] { KEY_SYS, KEY_DIA, KEY_RATE };
SQLiteDatabase db = getReadableDatabase();
final Cursor cursor = db.query(TABLE_BLOOD_PRESSURE, columns, "", null, "", "", "", "");
if(cursor.getCount>0){

while (cursor.moveToNext()) {
BloodPressureResult bloodPressureResult = new BloodPressureResult();
bloodPressureResult.setSys(cursor.getInt(cursor.getColumnIndex(KEY_SYS)));      
bloodPressureResult.setDia(cursor.getInt(cursor.getColumnIndex(KEY_DIA)));                 
bloodPressureResult.setRate(cursor.getInt(cursor.getColumnIndex(KEY_RATE)));     
bloodP.add(bloodPressureResult);   
}
}
cursor.close();
db.close();}
于 2012-05-28T07:44:20.603 に答える
0

テーブルに値を挿入してもよろしいですか?

addBloodPressure 関数SQLiteDatabase db = this.getWritableDatabase();の代わりに使用する必要があると思います。SQLiteDatabase db = this.getReadableDatabase();

于 2012-05-28T07:36:46.903 に答える