0

当我调用 .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);
    }
}
4

1 回答 1

0

明确您当前的状态:您说您从方法中得到"No Data"响应。getMake()因此; 你没有ExceptioncreateExifI方法中得到任何东西。因为如果 anException发生了,你的exifI实例将会是NULL并且你会得到一个NPEfromgetMake()方法但你没有。

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

于 2013-11-13T18:15:03.140 回答