【发布时间】:2013-05-23 19:41:01
【问题描述】:
我正在尝试使用游标获取一些数据,但我真的不知道我是否正确,因为我试图获取的数据的行和列返回 null。
这是我存储数据的地方:
JSONArray badges = jsonObject.getJSONArray("badges");
Log.i("badges length:", badges.length() + "");
for(int i = 0; i < badges.length(); i++){
JSONObject currentBadge = badges.getJSONObject(i);
Log.i("badge image_url:", currentBadge.getString("image_url") + "");
db.updateBadgesRecord(i, currentBadge.getString("id"), currentBadge.getString("name"), currentBadge.getString("description"), currentBadge.getString("image_url"), currentBadge.getString("club_id"), currentBadge.getString("created_at"));
}
Log.i 显示有 18 个对象(行)。
这里是 updateBadgesRecord 函数:
public boolean updateBadgesRecord(long rowId, String id, String name, String description, String image_url, String club_id, String created_at)
{
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;
}
我认为它正在存储,但我不确定。这就是我试图显示它的方式:
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(KEY_BADGES_IMAGEURL));
// 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();
}
}
}
badgeButtons 长度为 16,所以我知道我可以轻松填充徽章.... 但是.... 图像 url 返回 null (在我的控制台中打印“图像 url 为 null 18 次”)。这是我的 getBadgeRecord 函数:
public Cursor getBadgeRecord(long rowId) throws SQLException
{
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_CLUBID},
KEY_ROWID + "=" + rowId, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
我做错了什么?请帮忙!我是新手。
谢谢!
【问题讨论】:
-
SQLiteDatabase db = this.getReadableDatabase();你有没有初始化db。如果不在 getBadgeRecord 中试试这个
-
没有改变任何东西。我有一个名为 open() 的函数,我在其中调用 getWritableDatabase()。
-
我会首先检查 updateBadgesRecord 实际上是否正在获取要插入的非空 imageUrl。也只是为了调试尝试调用“DatabaseUtils.dumpCurrentRowToString(Cursor c)”来查看光标中的实际内容..