我正在尝试使用媒体商店加载Android设备中的所有图片。
这就是我正在做的事情
public void getImages(Context context) {
File Image_File;
final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID};
String orderBy = MediaStore.Images.Media.DATE_MODIFIED ;
Cursor cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy);
if (cursor != null){
cursor.moveToFirst();
final int dataColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
while (cursor.moveToNext()) {
Image_File = new File(cursor.getString(dataColumnIndex));
}
}
}
}
但下面的行给了我一个错误
Image_File = new File(cursor.getString(dataColumnIndex));
这是出现的错误
由java.lang.NullPointerException引起 尝试在空对象引用上调用虚方法'char [] java.lang.String.toCharArray()'
这是完整的Stack Trace
由java.lang.NullPointerException引起:尝试在空对象引用上调用虚方法'char [] java.lang.String.toCharArray()' 在java.io.File.fixSlashes(File.java:185) 在java.io.File。(File.java:134) 在PackageName.getImages(ClassName.java:87) 在PackageName.ClassName $ load.doInBackground(ClassName.java:52) at PackageName.ClassName $ load.doInBackground(ClassName.java:39) 在android.os.AsyncTask $ 2.call(AsyncTask.java:292) 在java.util.concurrent.FutureTask.run(FutureTask.java:237) 在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) 在java.lang.Thread.run(Thread.java:818)
我知道还有其他SO帖子谈论此主题,例如this,但后来我觉得它们与我的案例无关。
此版本崩溃发生在Android版本5.0到7.0之间(我的应用程序的最低Android版本是5.0)。
任何帮助都会感激不尽,因为我无法在手机上回溯问题。
答案 0 :(得分:0)
好吧,由于你已经调用了cursor.moveToFirst(),你的游标已经超过了前一个带有cursor.moveToNext()调用的条目。
moveToNext()
/**
* Move the cursor to the next row.
*
* <p>This method will return false if the cursor is already past the
* last entry in the result set.
*
* @return whether the move succeeded.
*/
你有没有尝试过:
try{
while (cursor.moveToNext()) {
Image_File = new File(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)));
}
}catch (NullPointerException e){
e.printStackTrace();
}finally {
if (cursor != null) {
cursor.close();
}
答案 1 :(得分:0)
试试这个
String orderBy = MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC";
Cursor cursor = this.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, // Which columns to return
null, // Return all rows
null,
orderBy);
// Get the column index of the Thumbnails Image ID
int columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
for(int i =0;i<cursor.getCount();i++){
cursor.moveToPosition(i);//List of all record
image_file =new File(cursor.getString(columnIndex));
}
cursor.close();