ExifInterface为所有标记返回null

时间:2013-11-13 17:46:49

标签: android null uri exif getattribute

当我打电话时,我的班级有问题.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);
    }
}

1 个答案:

答案 0 :(得分:0)

要使您的当前状态清晰:您说您从"No Data"方法获得了getMake()响应。从而;您没有从Exception方法获得任何createExifI。因为如果发生了Exception,那么您的exifI实例将是NULL,您将从NPE方法获得getMake(),但您没有吨。

如果上面的部分是正确的,那么问题的唯一原因是该ExifInterface.TAG_MAKE个实例没有任何带有ExifInterface标记的属性。您可以尝试列出(记录/打印)该ExifInterface实例的所有其他属性,以确保存在其他属性但TAG_MAKE。