Android:从MediaStore managedQuery中的指定文件夹获取所有id和路径
更新Logcat和Java代码。 嗨,我想从sd卡上的指定文件夹获取所有图像id和完整路径。Android:从MediaStore managedQuery中的指定文件夹获取所有id和路径,android,sd-card,mediastore,Android,Sd Card,Mediastore,更新Logcat和Java代码。 嗨,我想从sd卡上的指定文件夹获取所有图像id和完整路径。 这是我的密码 private void Gallery() { ImageList = new ArrayList<GalleryDetail>(); final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }; Cursor
这是我的密码
private void Gallery() {
ImageList = new ArrayList<GalleryDetail>();
final String[] columns = { MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID };
Cursor image_cursor;
image_cursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
new String[] {currentDir.toString()}, null);
if (image_cursor != null) {
while (image_cursor.moveToNext()) {
GalleryDetail img = new GalleryDetail();
String image_id = image_cursor.getString(image_cursor
.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
String image_path = image_cursor.getString(image_cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
Log.e("get Path.", image_path);
img.setImageId(image_id);
img.setImagePath(image_path);
ImageList.add(img);
}
// List of file path
FilePathStrings = new String[ImageList.size()];
for (int i = 0; i < ImageList.size(); i++) {
FilePathStrings[i] = ImageList.get(i).getImagePath();
}
}
}
private void Gallery(){
ImageList=新的ArrayList();
最终字符串[]列={MediaStore.Images.Media.DATA,
MediaStore.Images.Media.\u ID};
光标图像\光标;
image\u cursor=managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,列,null,
新字符串[]{currentDir.toString()},null);
if(图像\光标!=null){
while(image\u cursor.moveToNext()){
GalleryDetail img=新GalleryDetail();
字符串image\u id=image\u cursor.getString(image\u cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.\u ID));
字符串image\u path=image\u cursor.getString(image\u cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
Log.e(“获取路径”,图像路径);
img.setImageId(图像标识);
设置图像路径(图像路径);
ImageList.add(img);
}
//文件路径列表
FilePathStrings=新字符串[ImageList.size()];
对于(int i=0;i
但它对我不起作用,请将此消息显示给我
09-11:17:21.698:E/AndroidRuntime(1204):致命异常:AsyncTask#1
09-11:17:21.698:E/AndroidRuntime(1204):java.lang.RuntimeException:执行doInBackground()时出错
09-11:17:21.698:E/AndroidRuntime(1204):在android.os.AsyncTask$3.done(AsyncTask.java:200)
09-11:17:21.698:E/AndroidRuntime(1204):位于java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
09-11:17:21.698:E/AndroidRuntime(1204):位于java.util.concurrent.FutureTask.setException(FutureTask.java:125)
09-11:17:21.698:E/AndroidRuntime(1204):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
09-11:17:21.698:E/AndroidRuntime(1204):在java.util.concurrent.FutureTask.run(FutureTask.java:138)
09-11:17:21.698:E/AndroidRuntime(1204):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
09-11:17:21.698:E/AndroidRuntime(1204):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
09-11:17:21.698:E/AndroidRuntime(1204):在java.lang.Thread.run(Thread.java:1019)
09-11:17:21.698:E/AndroidRuntime(1204):由以下原因引起:android.database.sqlite.SQLiteException:绑定或列索引超出范围:句柄0x2475a8
09-11:17:21.698:E/AndroidRuntime(1204):在android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)
09-11:17:21.698:E/AndroidRuntime(1204):在android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
09-11:17:21.698:E/AndroidRuntime(1204):位于android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
09-11:17:21.698:E/AndroidRuntime(1204):在android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
09-11:17:21.698:E/AndroidRuntime(1204):在android.content.ContentResolver.query(ContentResolver.java:262)上
09-11:17:21.698:E/AndroidRuntime(1204):位于android.app.Activity.managedQuery(Activity.java:1644)
09-11:17:21.698:E/AndroidRuntime(1204):位于com.mimi.ngsbusproject.GalleryActivity.Gallery(GalleryActivity.java:166)
09-11:17:21.698:E/AndroidRuntime(1204):在com.mimi.ngsbusproject.GalleryActivity.access$0(GalleryActivity.java:159)
09-11:17:21.698:E/AndroidRuntime(1204):位于com.mimi.ngsbusproject.GalleryActivity$LoadGallery.doInBackground(GalleryActivity.java:85)
09-11:17:21.698:E/AndroidRuntime(1204):在com.mimi.ngsbusproject.GalleryActivity$LoadGallery.doInBackground(GalleryActivity.java:1)
09-11:17:21.698:E/AndroidRuntime(1204):在android.os.AsyncTask$2.call(AsyncTask.java:185)
09-11:17:21.698:E/AndroidRuntime(1204):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
09-11:17:21.698:E/AndroidRuntime(1204):。。。4更多
请帮忙。我怎样才能解决这个问题
对不起,我的语言能力很差。请提前感谢:)您在mainfest.xml中添加了此权限吗?
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
更新
ArrayList<String> mFiles = new ArrayList<String>();
File mDirectory;
String folderPath = "/mnt/sdcard/download";
mDirectory = new File(folderPath);
// Get the files in the directory
File[] files = mDirectory.listFiles();
if (files != null && files.length > 0) {
for (File f : files) {
mFiles.add(f.getAbsolutePath());
}
}
ArrayList mFiles=new ArrayList();
文件目录;
字符串folderPath=“/mnt/sdcard/download”;
mDirectory=新文件(folderPath);
//获取目录中的文件
File[]files=mDirectory.listFiles();
如果(files!=null&&files.length>0){
用于(文件f:文件){
添加(f.getAbsolutePath());
}
}
更新
ArrayList<String> mFiles = new ArrayList<String>();
File mDirectory;
String folderPath = "/mnt/sdcard/download";
mDirectory = new File(folderPath);
// Get the files in the directory
File[] files = mDirectory.listFiles();
if (files != null && files.length > 0) {
for (File f : files) {
mFiles.add(f.getAbsolutePath());
}
}
用于获取所有图像的递归函数
private ArrayList<String> allImages = new ArrayList<String>();
String[] extensions = { "jpg", "png", "jpeg", "JPG", "PNG", "JPEG" };
private void loadAllImages(String rootFolder) {
File file = new File(rootFolder);
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files != null && files.length > 0) {
for (File f : files) {
if (f.isDirectory()) {
loadAllImages(f.getAbsolutePath());
} else {
for (int i = 0; i < extensions.length; i++) {
if (f.getAbsolutePath().endsWith(extensions[i])) {
allImages.add(f.getAbsolutePath());
}
}
}
}
}
}
}
private ArrayList allImages=new ArrayList();
字符串[]扩展={“jpg”、“png”、“jpeg”、“jpg”、“png”、“jpeg”};
私有void loadAllImage(字符串根文件夹){
File File=新文件(rootFolder);
if(file.isDirectory()){
File[]files=File.listFiles();
如果(files!=null&&files.length>0){
用于(文件f:文件){
if(f.isDirectory()){
加载图像(f.getAbsolutePath());
}否则{
for(int i=0;i
更新以获取库图像
private String[] arrPath;
private boolean[] thumbnailsselection;
private int ids[];
private int count;
final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
Cursor imagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, new String[] {"%myimagesfolder%"}, orderBy); //UPDATE HERE
int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
count = imagecursor.getCount();
arrPath = new String[this.count];
ids = new int[count];
for (int i = 0; i < count; i++) {
imagecursor.moveToPosition(i);
ids[i] = imagecursor.getInt(image_column_index);
int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
arrPath[i] = imagecursor.getString(dataColumnIndex);
}
private String[]arrPath;
公共关系