2012-08-03 127 views
1

我尝试从相机拍摄照片后从URI获取真实文件路径。我这样做:correclty如何从URI获取真实文件路径?

private String getRealPathFromURI(Uri contentURI) { 
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
} 

这:

public String getRealPathFromURI(Uri contentUri) { 
    String[] proj = { MediaColumns.DATA }; 
    Cursor cursor = managedQuery(contentUri, proj, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
    } 

和:

private String getRealPathFromURI(Uri selectedVideoUri) { 
    String filePath; 
    final String[] filePathColumn = new String[] { MediaColumns.DATA }; 

    Cursor cursor = getContentResolver().query(selectedVideoUri, 
      filePathColumn, null, null, null); 
    cursor.moveToFirst(); 

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
    filePath = cursor.getString(columnIndex); 
    cursor.close(); 
    return filePath; 
} 

在大多数手机上,一切正常。但是,在与错误一些手机应用程序崩溃:

08-03 14:55:13.092: E/AndroidRuntime(1676):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(SourceFile:190) 
08-03 14:55:13.092: E/AndroidRuntime(1676):  at android.os.Handler.dispatchMessage(SourceFile:130) 
08-03 14:55:13.092: E/AndroidRuntime(1676):  at android.os.Looper.loop(SourceFile:351) 
08-03 14:55:13.092: E/AndroidRuntime(1676):  at android.app.ActivityThread.main(SourceFile:4070) 
08-03 14:55:13.092: E/AndroidRuntime(1676):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-03 14:55:13.092: E/AndroidRuntime(1676):  at java.lang.reflect.Method.invoke(Method.java:538) 
08-03 14:55:13.092: E/AndroidRuntime(1676):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(SourceFile:901) 
08-03 14:55:13.092: E/AndroidRuntime(1676):  at com.android.internal.os.ZygoteInit.main(SourceFile:659) 
08-03 14:55:13.092: E/AndroidRuntime(1676):  at dalvik.system.NativeStart.main(Native Method) 
08-03 14:55:19.823: I/System.out(1728): --MyLocationListener is created! 
08-03 14:55:19.838: D/AndroidRuntime(1728): Shutting down VM 
08-03 14:55:19.838: W/dalvikvm(1728): threadid=1: thread exiting with uncaught exception (group=0x4001c648) 
08-03 14:55:19.842: E/AndroidRuntime(1728): FATAL EXCEPTION: main 
08-03 14:55:19.842: E/AndroidRuntime(1728): java.lang.RuntimeException: Unable to create service com.webparadox.tonquer.MyLocationListener: java.lang.NullPointerException 
08-03 14:55:19.842: E/AndroidRuntime(1728):  at android.app.ActivityThread.handleCreateService(SourceFile:2221) 
08-03 14:55:19.842: E/AndroidRuntime(1728):  at android.app.ActivityThread.access$2500(SourceFile:160) 

帮我修复这个bug,请

+0

你肯定认为,坠机是getRealPathFromURI进行中省略?你的logcat转储是不完整的,也许你可以发布整个堆栈 – nandeesh 2012-08-03 11:47:16

回答

0

希望下面的代码将有助于

String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, 
    }; 
    Cursor mImageCursor = getContentResolver().query(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, 
      null, null); 

    if (mImageCursor != null) 
    { 
     if (mImageCursor.getCount() == 0) 
     { 
      setContentView(R.layout.no_image_found); 
         } 
     else 
     { 

      while (mImageCursor.moveToNext()){ 
       Images im = new Images(); 
       int column_index = mImageCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
       im.setFilePath(mImageCursor.getString(column_index)); 
       image_column_index = mImageCursor 
         .getColumnIndexOrThrow(MediaStore.Images.Media._ID); 
       int id = mImageCursor.getInt(image_column_index); 
       im.setUri(Uri.withAppendedPath(
         MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" 
           + id)); 
       arrayOfImages.add(im); 
      } 
     } 
    } 
0

Here is the solution - >只要复制粘贴此输入您的代码并使用以下代码获取文件路径: -

filepath= FileUtils.getPath(getActivity(),selectedImageUri); 

注: -

else if (isDownloadsDocument(uri)) { 
      final String id = DocumentsContract.getDocumentId(uri); 
      final Uri contentUri = ContentUris.withAppendedId(
        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); 

      return getDataColumn(context, contentUri, null, null); 
     } 

- >方法,如果你想:)

+0

是这个答案有用吗?如果它是标记为回答:)或帮助我得到它的投票 – Hardy 2015-11-24 11:21:35

相关问题