从特定文件夹

时间:2015-12-07 22:45:29

标签: android random android-external-storage

我有一个Android应用程序,从我的外部存储生成3个随机图像。然后将我得到的随机图像设置为正在工作的Imageview。问题是我不想查看每张图片,只是从外部文件夹中的一个特定文件夹中获取随机图像。如何更改代码才能获得此代码?

public class SuggestedOutfit extends AppCompatActivity{

public ImageView shirts;
public ImageView pants;
public ImageView shoes;
Button reload;
private Bitmap currentBitmap = null;
String[] projection = new String[]{
        MediaStore.Images.Media.DATA,
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.suggested_outfit);
    shirts = (ImageView)findViewById(R.id.shirtImage);
    pants = (ImageView)findViewById(R.id.pantsImage);
    shoes = (ImageView)findViewById(R.id.shoesImage);

    shirts.setImageBitmap(getImage());
    pants.setImageBitmap(getImage());
    shoes.setImageBitmap(getImage());

    reload = (Button)findViewById(R.id.getNewOutfit);
    reload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            finish();
            startActivity(getIntent());
        }
    });
}


public Bitmap getImage () {
    Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    Cursor cur = getContentResolver().query(images,
            projection,"", null, ""
    );
    final ArrayList<String> imagesPath = new ArrayList<String>();
    if (cur.moveToFirst()) {

        int dataColumn = cur.getColumnIndex(
                MediaStore.Images.Media.DATA);
        do {
            imagesPath.add(cur.getString(dataColumn));
        } while (cur.moveToNext());
    }
    cur.close();
    final Random random = new Random();
    final int count = imagesPath.size();
    int number = random.nextInt(count);
    String path = imagesPath.get(number);
    currentBitmap = BitmapFactory.decodeFile(path);

    return currentBitmap;
}

}

1 个答案:

答案 0 :(得分:1)

我有两种方式可以想到,你几乎可以得到它的所有内容:

  1. 就在这一行:

    imagesPath.add(cur.getString(dataColumn));

  2. 如果值是你想要的,你必须添加一个过滤器才能添加到数组中。例如:

    do {
       String path = cur.getString(dataColumn);
       if(path.contains("/wardrobe/")){
          imagesPath.add(path);
       }
    } while (cur.moveToNext());
    

    你可以让if更加复杂,以确保不会遇到任何奇怪的边缘情况,但这就是它。只有你想要的地方的图像才会被添加到数组中,然后你会随机选择一个。

    1. 或者您也可以将适当的查询参数传递给getContentResolver().query,而不是简单地传递""

    2. 类似的东西:

       getContenteResolver().query(
         images,
         projection,
         MediaStore.Images.Media.DATA + " contains /wardrobe/",
         null,
         "");
      

      ps:(上面的这个SQL语句只是一个例子,它不能正常工作,因为它没有被正确转义,只是指向正确方向的指针,以防你想在SQL中实现它查询)

      但我个人会使用第一种方法。