2017-11-05 11 views
0

Uriファイルの実際のパスをデータベースにアップロードするファイル形式(アップロードするデータファイル)に変更したいと思います。 Uriからファイル形式のファイルデータを取得するにはどうすればよいですか?uriファイルから実際のパスを取得してアップロードするandroid

public static String getRealPath(Context context, Uri uri) { 
     final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 
    // DocumentProvider 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { 
      // ExternalStorageProvider 
      if (isExternalStorageDocument(uri)) { 
       final String docId = DocumentsContract.getDocumentId(uri); 
       final String[] split = docId.split(":"); 
       final String type = split[0]; 

       if ("primary".equalsIgnoreCase(type)) { 
        return Environment.getExternalStorageDirectory() + "/" + split[1]; 
       } 
       // TODO handle non-primary volumes 
      } 
      // DownloadsProvider 
      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); 
      } 
      // MediaProvider 
      else 
      if (isMediaDocument(uri)) { 
       final String docId = DocumentsContract.getDocumentId(uri); 
       final String[] split = docId.split(":"); 
       final String type = split[0]; 
       Uri contentUri = null; 
       if ("image".equals(type)) { 
        contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
       } else if ("video".equals(type)) { 
        contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
       } else if ("audio".equals(type)) { 
        contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
       } 
       final String selection = "_id=?"; 
       final String[] selectionArgs = new String[] {split[1]}; 
       return getDataColumn(context, contentUri, selection, selectionArgs); 
      } 
     } 
     // MediaStore (and general) 
     else if ("content".equalsIgnoreCase(uri.getScheme())) { 
      // Return the remote address 
      if (isGooglePhotosUri(uri)) 
       return uri.getLastPathSegment(); 
      return getDataColumn(context, uri, null, null); 
     } 
     // File 
     else if ("file".equalsIgnoreCase(uri.getScheme())) { 
      return uri.getPath(); 
     } 
    } 
    return null; 
} 

そして、これが私のOnActivityResultコードです

   Uri uri = data.getData(); 
       // Get the path 
       System.out.println("url temp : " + uri); 
       String path = getRealPath(this, uri); 
       System.out.println("path url : " + path); 
       File finalFile = new File(path); 

       System.out.println("final file : " + finalFile); 

       if (files.size() == jmlDokumen){ 
        files.remove(tagId); 
        files.add(tagId, finalFile); 
       } 
       else{ 
        files.add(finalFile); 
       } 


       String fileName = path.substring(path.lastIndexOf("/")+1); 
       et.setText(fileName); 

これは私のエラー

パスのURLです:ヌル
11月5日11:07:25.637 30476から30476/com.project。 roy.ezrec W/System.err:java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'char [] java.lang.String.toCharArray()'を呼び出そうとしました

c誰でも助けてくれますか?

答えて

0

私は(少なくとも、それは私のXperia XZプレミアムに取り組んでいる)

if (isExternalStorageDocument(uri)) { 
    final String docId = DocumentsContract.getDocumentId(uri); 
    final String[] split = docId.split(":"); 
    final String type = split[0]; 

    String extDirectory = Environment.getExternalStorageDirectory().toString(); 

    if ("primary".equalsIgnoreCase(type)) { //Primary storage 
     return extDirectory + "/" + split[1]; 
    } 

    // handle non-primary volumes 
    else{ 
     extDirectory = extDirectory.replace(
       "emulated/0", 
       type); 
     return extDirectory + "/" + split[1]; 
    } 
} 
+0

感謝を二SDカードとの問題を解決する方法を発見したしてください..私は問題があまりにも二SDカードをだと思います – roihan

関連する問題