0

这听起来像是一个愚蠢的问题,但我正在努力解决这个问题。我正在开发一个报价应用程序,因此我希望每次启动应用程序时都从数据库中随机订购报价。

我正在使用 CursorLoader 和 ViewPager。我在屏幕上有一些按钮(放入收藏夹按钮),它使用内容解析器更新数据库中的列,该内容解析器在 ContentProvider 中触发 update()。然后更新会导致重新查询以更新所做的更改。都是标准的。

这当然会导致由于 random() 子句的 order 而给我排序不同的行,并导致屏幕“消失”。

知道如何解决这个问题吗?我真的很想保留随机排序功能。

class MyContentProvider extends ContentProvider {
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    Cursor cursor = db.query(TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
    cursor.setNotificationUri(resolver, uri);
    return cursor;
}

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    int count = db.update(TABLE_NAME, values, selection, selectionArgs);
    resolver.notifyChange(uri, null);
    return count;
}
}
4

2 回答 2

1

你可以使用类似的东西

Cursor c = db.rawQuery("select * from table ORDER BY RANDOM()");

SQLite 文档

于 2014-08-14T03:14:43.857 回答
0

正如 zapl 建议的那样,我最终做的是添加一列。它将保存 myOrder,它将在 onCreate 中填充随机值,然后只需使用 myOrder 的 order 进行 Select

于 2012-11-27T15:51:50.163 回答