Android:不重复的SQLite Random()查询

时间:2011-06-10 10:06:17

标签: android sqlite

我需要水平地从我的sqlite数据库中显示3个随机图像。由于不可能制作水平ListView,我通过在水平方向LinearLayout内将3个ListViews彼此相邻来操纵我的方式。

所以我目前正在使用这种方法:

final ListView g = (ListView)findViewById(R.id.lstText1);
final ListView h = (ListView)findViewById(R.id.lstText2);
final ListView i = (ListView)findViewById(R.id.lstText3);

    g.setOnItemClickListener(this);
    h.setOnItemClickListener(this);
    i.setOnItemClickListener(this);
// Set the adapter to our custom adapter (below)

g.setAdapter(new MySimpleCursorAdapter(this, R.layout.toplist,
            managedQuery(Uri.withAppendedPath(Provider.CONTENT_URI,
                    Database.Project.NAME), new String[] { BaseColumns._ID,
                    Database.Project.C_SMALLIMAGE}, null, null, "RANDOM() LIMIT 1"),
            new String[] { Database.Project.C_SMALLIMAGE }, new int[] {R.id.image1}));

h.setAdapter(new MySimpleCursorAdapter(this, R.layout.toplist,
            managedQuery(Uri.withAppendedPath(Provider.CONTENT_URI,
                    Database.Project.NAME), new String[] { BaseColumns._ID,
                    Database.Project.C_SMALLIMAGE}, null, null, "RANDOM() LIMIT 1"),
            new String[] { Database.Project.C_SMALLIMAGE }, new int[] {R.id.image1}));

i.setAdapter(new MySimpleCursorAdapter(this, R.layout.toplist,
            managedQuery(Uri.withAppendedPath(Provider.CONTENT_URI,
                    Database.Project.NAME), new String[] { BaseColumns._ID,
                    Database.Project.C_SMALLIMAGE}, null, null, "RANDOM() LIMIT 1"),
            new String[] { Database.Project.C_SMALLIMAGE }, new int[] {R.id.image1}));

除了随机显示的图像之间应该是截然不同的,所以一切都按顺序完美运行。使用上面的方法,因为我使用3个不同的ListView,有时它们会显示相同的随机图像。

有人可以帮我解决问题吗?也许通过修改这一行"RANDOM() LIMIT 1"或者其他,我仍然对任何类型的解决方案持开放态度。

非常感谢!

3 个答案:

答案 0 :(得分:4)

我最近一直在使用SQLite为iPhone项目做类似的工作。

看看我提出的以下两个问题,我怀疑他们会回答你想要做的事情。

SQLite select statement optimisation advice

SQLite Select data from multiple rows returned as one row

答案 1 :(得分:1)

FSM拯救我们......你还在这里

ListView for single item是个坏主意

在布局中放置3个ImagesView并执行类似的操作

final ImageView[] images = new ImageView[3];
ImageLoader loader = new ImageLoader(this);

images[0] = (ImageView)findViewById(R.id.imageView1);
images[1] = (ImageView)findViewById(R.id.imageView2);
images[2] = (ImageView)findViewById(R.id.imageView3);

int counter = 0;

    Cursor c = managedQuery(Uri.withAppendedPath(Provider.CONTENT_URI,
                    Database.Project.NAME), new String[] { BaseColumns._ID,
                    Database.Project.C_SMALLIMAGE}, null, null, "RANDOM() LIMIT 3");
  if(c!=null && c.moveToFirst()){
     do{
       String url = c.getString(1);
       images[counter].setTag(url);
       loader.DisplayImage(url, this, images[counter]);
       counter++;
     }while(c.moveToNext());
  }

答案 2 :(得分:0)

获取rowcount,在客户端选择0到rowcount-1范围内的随机数,然后使用LIMIT选择第n行......