【发布时间】:2013-11-13 17:46:49
【问题描述】:
当我调用 .getMake(); 时,我的班级有问题它总是返回 null,所以我得到字符串“No Data”。我知道 Uri 不是空的,因为我每次都用 uripath 得到第一个 Toast。我也知道图像有标签“TAG_MAKE”(我检查过)。它甚至不适用于所有其他标签。
我应该改变什么?
public class ExifE { private Uri uri;
private ExifInterface exifI;
private Context context;
public ExifE(Context con) {
context = con;
SharedPreferences prefs = context.getSharedPreferences("prefs", context.MODE_PRIVATE);
uri = Uri.parse(myPrefs.getString("currentImageUri", "fail"));
Toast.makeText(context, uri.getPath(), Toast.LENGTH_SHORT).show();
try {
this.createExifI(uri.getPath());
} catch (IOException e) {
e.printStackTrace();
}
}
public void createExifI(String filePath) throws IOException {
this.exifI = new ExifInterface(filePath);
}
public String getMake() {
String make;
if (exifI.getAttribute(ExifInterface.TAG_MAKE) != null) {
make = exifI.getAttribute(ExifInterface.TAG_MAKE);
} else {
make = "No Data";
}
return make;
}
解决方案
创建 ExifInterface 时出现问题。
我不能使用 uri.getPath(); ,我必须调用它来获取真正的文件路径而不是 MediaStore 路径。
private String getRealPathFromURI(Uri contentURI, Activity activity) {
Cursor cursor = activity.getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) { // Source is Dropbox or other similar local file
// path
return contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
}
【问题讨论】:
-
您确定
exifI创建正确吗?你什么时候打电话给getMake()?您是否尝试使用调试器跟踪您的代码?我建议您在调用getAttribute()之前检查exifI是否为空。 -
我创建的 ExifInterface 是假的。我不能使用
uri.getPath()我必须使用真正的路径而不是 MediaStore 路径所以我必须调用它:` private String getRealPathFromURI(Uri contentURI, Activity activity) { Cursor cursor = activity.getContentResolver().query(contentURI,空,空,空,空); if (cursor == null) { // 来源是 Dropbox 或其他类似的本地文件 // 路径 return contentURI.getPath(); } else { cursor.moveToFirst(); int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);返回 cursor.getString(idx); } }`
标签: android null uri exif getattribute