0

まず、SQLステートメントがあります

private static final String DATABASE_CREATE_BADGES =
        "create table if not exists badges (id integer primary key autoincrement, "
        + "name VARCHAR, description VARCHAR, image_url VARCHAR, club_id VARCHAR, created_at VARCHAR);";

次に、これが作成されていることを確認します。

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        try {
            Log.i("execSQL", "Creating badges");
            db.execSQL(DATABASE_CREATE_BADGES);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

次に、メソッドを呼び出すときに値を指定する保存メソッドがあります。Log,i は有効な文字列を示しています。

//---updates a badge record---
public boolean updateBadgesRecord(long rowId, String id, String name, String description, String image_url, String club_id, String created_at) 
{

    Log.i("image_url in updateBadgesRecord", image_url);
    ContentValues args = new ContentValues();
    if(id != null){
    args.put(KEY_BADGES_ID, id);
    }
    if(name != null){
    args.put(KEY_BADGES_NAME, name);
    }
    if(description != null){
    args.put(KEY_BADGES_DESCRIPTION, description);
    }
    if(image_url != null){
    args.put(KEY_BADGES_IMAGEURL, image_url);
    }
    if(club_id != null){
    args.put(KEY_BADGES_CLUBID, club_id);
    }
    if(created_at != null){
    args.put(KEY_BADGES_CREATEDAT, created_at);
    }

    return db.update(DATABASE_TABLE_BADGES, args, KEY_ROWID + "=" + rowId, null) > 0;
}

これらのメソッドを呼び出す前に、次の方法でデータベースを開いています。

db = DBHelper.getWritableDatabase();

私はそれが節約されていると思います。これは私がデータを取得しようとしている方法です:

public Cursor getBadgeRecord(long rowId) throws SQLException 
{
    SQLiteDatabase db  = DBHelper.getReadableDatabase();
    Cursor mCursor =
            db.query(true, DATABASE_TABLE_BADGES, new String[] {KEY_ROWID,
            KEY_BADGES_ID, KEY_BADGES_NAME, KEY_BADGES_DESCRIPTION, KEY_BADGES_IMAGEURL, KEY_BADGES_CLUBID, KEY_BADGES_CREATEDAT}, 
            KEY_ROWID + "=" + rowId, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

ここでメソッドを呼び出しています、prinln は null を返します。

public void activateBadgeList(){
    for(int i = 0; i < badgeButtons.length; i++){
        if(true){
        badgeButtons[i].setActivated(true);
        badgeButtons[i].setAlpha(1.0f);

        db.open();
        Cursor c = db.getBadgeRecord(i);
        String image_url = null;
        if (c.moveToFirst()){
               while(!c.isAfterLast()){
                  image_url = c.getString(c.getColumnIndex("image_url"));
                  // do what ever you want here
                  c.moveToNext();
               }
            }
            c.close();
        if(image_url != null){
        Log.i("image url", image_url);
        } else {
        Log.e("image url", "image url is null");    
        }
        badgeButtons[i] = UrlImageViewHelper.setUrlDrawable(badgeButtons[i], image_url);
        db.close();
        }
    }

だから私は何か間違ったことをしているに違いない.しかし、それは何ですか?

4

1 に答える 1

0

この質問に対する答えは次のとおりです。db.update(...) は既存の行のみを更新します。事前に db.insert(...) を実行してください。

于 2013-05-26T11:58:50.533 に答える