[英]Android: Get all id and path from specify folder in MediaStore managedQuery
UPDATE Logcat and Java Code. UPDATE Logcat和Java代码。
Hi I want to get all image id,full path from specify folder on sd-card. 嗨,我想获取所有图像ID,从SD卡上指定文件夹的完整路径。
this my code. 这是我的代码。
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();
}
}
}
But it doesn't work for me and log cat show this message to me. 但这对我不起作用,日志猫向我显示此消息。
09-11 11:17:21.698: E/AndroidRuntime(1204): FATAL EXCEPTION: AsyncTask #1 09-11 11:17:21.698: E/AndroidRuntime(1204): java.lang.RuntimeException: An error occured while executing doInBackground() 09-11 11:17:21.698: E/AndroidRuntime(1204): at android.os.AsyncTask$3.done(AsyncTask.java:200) 09-11 11:17:21.698: E/AndroidRuntime(1204): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 09-11 11:17:21.698: E/AndroidRuntime(1204): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 09-11 11:17:21.698: E/AndroidRuntime(1204): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 09-11 11:17:21.698: E/AndroidRuntime(1204): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 09-11 11:17:21.698: E/AndroidRuntime(1204): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 09-11 11:17:21.698: E/AndroidRuntime(1204): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 0 09-11 11:17:21.698:E / AndroidRuntime(1204):致命异常:AsyncTask#1 09-11 11:17:21.698:E / AndroidRuntime(1204):java.lang.RuntimeException:执行doInBackground时发生错误()09-11 11:17:21.698:E / AndroidRuntime(1204):位于android.os.AsyncTask $ 3.done(AsyncTask.java:200)09-11 11:17:21.698:E / AndroidRuntime(1204):在java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:274)上09-11 11:17:21.698:E / AndroidRuntime(1204):在java.util.concurrent.FutureTask.setException(FutureTask.java: 125)09-11 11:17:21.698:E / AndroidRuntime(1204):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:308)09-11 11:17:21.698:E / AndroidRuntime( 1204):在java.util.concurrent.FutureTask.run(FutureTask.java:138)09-11 11:17:21.698:E / AndroidRuntime(1204):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java :1088)09-11 11:17:21.698:E / AndroidRuntime(1204):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:581)0 9-11 11:17:21.698: E/AndroidRuntime(1204): at java.lang.Thread.run(Thread.java:1019) 09-11 11:17:21.698: E/AndroidRuntime(1204): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x2475a8 09-11 11:17:21.698: E/AndroidRuntime(1204): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158) 09-11 11:17:21.698: E/AndroidRuntime(1204): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 09-11 11:17:21.698: E/AndroidRuntime(1204): at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330) 09-11 11:17:21.698: E/AndroidRuntime(1204): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 09-11 11:17:21.698: E/AndroidRuntime(1204): at android.content.ContentResolver.query(ContentResolver.java:262) 09-11 11:17:21.698: E/AndroidRuntime(1204): at android.app.Activity.managedQuery(Activity.java:1644) 09-11 11:17:21.698: E/AndroidRuntime(1204): at c 9-11 11:17:21.698:E / AndroidRuntime(1204):at java.lang.Thread.run(Thread.java:1019)09-11 11:17:21.698:E / AndroidRuntime(1204):原因: android.database.sqlite.SQLiteException:绑定或列索引超出范围:处理0x2475a8 09-11 11:17:21.698:E / AndroidRuntime(1204):位于android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)09 -11 11:17:21.698:E / AndroidRuntime(1204):位于android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)09-11 11:17:21.698:E / AndroidRuntime(1204):位于android.content .ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)09-11 11:17:21.698:E / AndroidRuntime(1204):at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)09-11 11:17:21.698 :E / AndroidRuntime(1204):位于android.content.ContentResolver.query(ContentResolver.java:262)09-11 11:17:21.698:E / AndroidRuntime(1204):位于android.app.Activity.managedQuery(Activity。 java:1644)09-11 11:17:21.698:E / AndroidRuntime(1204):at c om.mimi.ngsbusproject.GalleryActivity.Gallery(GalleryActivity.java:166) 09-11 11:17:21.698: E/AndroidRuntime(1204): at com.mimi.ngsbusproject.GalleryActivity.access$0(GalleryActivity.java:159) 09-11 11:17:21.698: E/AndroidRuntime(1204): at com.mimi.ngsbusproject.GalleryActivity$LoadGallery.doInBackground(GalleryActivity.java:85) 09-11 11:17:21.698: E/AndroidRuntime(1204): at com.mimi.ngsbusproject.GalleryActivity$LoadGallery.doInBackground(GalleryActivity.java:1) 09-11 11:17:21.698: E/AndroidRuntime(1204): at android.os.AsyncTask$2.call(AsyncTask.java:185) 09-11 11:17:21.698: E/AndroidRuntime(1204): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 09-11 11:17:21.698: E/AndroidRuntime(1204): ... 4 more om.mimi.ngsbusproject.GalleryActivity.Gallery(GalleryActivity.java:166)09-11 11:17:21.698:E / AndroidRuntime(1204):at com.mimi.ngsbusproject.GalleryActivity.access $ 0(GalleryActivity.java:159) 09-11 11:17:21.698:E / AndroidRuntime(1204):at com.mimi.ngsbusproject.GalleryActivity $ LoadGallery.doInBackground(GalleryActivity.java:85)09-11 11:17:21.698:E / AndroidRuntime(1204) :位于com.mimi.ngsbusproject.GalleryActivity $ LoadGallery.doInBackground(GalleryActivity.java:1)09-11 11:17:21.698:E / AndroidRuntime(1204):位于android.os.AsyncTask $ 2.call(AsyncTask.java: 185)09-11 11:17:21.698:E / AndroidRuntime(1204):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:306)09-11 11:17:21.698:E / AndroidRuntime( 1204):...还有4个
Please help.How can I solve this problem? 请帮忙。如何解决此问题?
Sorry for my very bad language skill.Thank in Advance :) 对不起,我的语言能力很差。先谢谢您了:)
Have added this permission in mainfest.xml? 在mainfest.xml中添加了此权限?
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
UPDATE 更新
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());
}
}
UPDATE 更新
Recursive function to getAll images 递归函数获取所有图像
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());
}
}
}
}
}
}
}
UPDATE To fetch gallery images 更新以获取图库图像
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.