2014-08-27 48 views
0

我试图从库中获取所选文件的路径,但它返回null,我不知道为什么。我看到的每个代码都使用相同的方法,但对我无效。这里是我的代码:来自Uri的图像路径返回null

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // LOAD_FILE_REQUEST is a global variable: 
    // private static final int LOAD_FILE_REQUEST = 1; 

    if (requestCode == LOAD_FILE_REQUEST && resultCode == RESULT_OK && data != null) { 
     if(data.getData() == null) { 
      System.out.println("NULL"); 
     } else { 
      System.out.println("NOT NULL"); // <--- Printed 
     } 

     currImageURI = data.getData(); 

     String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = getContentResolver().query(currImageURI, filePathColumn, null, null, null); 
     if(cursor.moveToFirst()){ 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String yourRealPath = cursor.getString(columnIndex); 
      System.out.println("REAL PATH "+yourRealPath); 
     } else { 
      System.out.println("NO ROWS!!!"); // <-- Not printed 
     } 
     cursor.close(); 
    } 

} 

回答

1

你能解释多一点你的问题是什么?你在哪里得到空?

您在哪个Android版本中运行此代码?从Android 4.4开始,当您发送获取图像的意图时打开的filechooser会返回相对uri,因为它不仅会显示存储在设备中的文件,还会显示存储在云中的文件。所以,可能会发生这样的情况,即您获取相对URI并且在查询设备上的位置时,您会收到空值,因为ContentResolver没有该文件的路径。如果是这种情况(其实即使你不是,因为你应该为Android的新版本开发兼容性的应用程序),我建议你使用Content Resvolver打开一个InputStream来获取文件(openInputStream( URI),因为它可以让你从任何位置(包括本地和云)。

取文件我希望它能帮助:)

+0

这“你得到一个相对的URI,当你查询它的位置(...)ContentResolver没有该文件的路径。”帮助我用另一种方法解决我的问题。不是试图获取图像位置,而是将其保存在sd上,然后通过这个新的文件路径进行访问。谢谢。 – lucasdc 2014-08-28 16:16:31

2

你加线

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在您的清单? =)

(有这个问题^^)

+0

哦,我没有意识到我必须添加它。谢谢,但无论如何,仍然不工作.. – lucasdc 2014-08-27 23:46:09

2

嗯,这里是我怎么做我的生活壁纸(Noiraude,看看:P)

@Override protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

switch (requestCode) { 
    case 100: 
     if (resultCode == RESULT_OK) { 
      Uri selectedImage = imageReturnedIntent.getData(); 
      @SuppressWarnings("unused") 
      InputStream imageStream = null; 
      try { 
       imageStream = getContentResolver().openInputStream(
         selectedImage); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      sharedPreferences = getSharedPreferences("NLP_settings", 0); 
      Editor editor = sharedPreferences.edit(); 
      editor.putString("key_bit", getPath(selectedImage)); 
      editor.commit(); 
      restartThis(); 
     } 
    } 
} 

public String getPath(Uri uri) { 
    // just some safety built in 
    if (uri == null) { 
     return null; 
    } 
    // try to retrieve the image from the media store first 
    // this will only work for images selected from gallery 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    if (cursor != null) { 
     int column_index = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
    // this is our fallback here 
    return uri.getPath(); 
} 

+0

后备工作像一个魅力!万分感谢! – sud007 2016-11-02 17:06:00

相关问题