2

Pfad der Videodatei aus der Galerie erhalten erhalten NULL. Wie bekomme ich den Pfad der Videodatei? Get URi in Aktivität Ergebnis geben auch null. Umwandlung von Uri in String auch immer Null.Pfad der ausgewählten Videodatei aus der Galerie wird mit NULL abgerufen. Wie bekomme ich den Pfad der Videodatei?

Intent intent; 
String selectedVideo1Path, selectedVideo2Path; 
EditText e1,e2; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.videos_activity); 
    Button button1 = (Button) findViewById(R.id.video1_btn); 
    Button button2 = (Button) findViewById(R.id.video2_btn); 



    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      selectVideoFromGallery(); 
      startActivityForResult(intent, 101); 
     } 
    }); 

    button2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      selectVideoFromGallery(); 
      startActivityForResult(intent, 102); 
     } 
    }); 



} 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 101) { 
     if (data.getData() != null) { 
      selectedVideo1Path = getPath(data.getData()); 

      Toast.makeText(MergeVideosActivity.this, "Path 1 : "+selectedVideo1Path, Toast.LENGTH_SHORT).show(); 


     } else { 
      Toast.makeText(getApplicationContext(), "Failed to select video", Toast.LENGTH_LONG).show(); 
     } 
    } 
    if (requestCode == 102) { 
     if (data.getData() != null) { 
      selectedVideo2Path = getPath(data.getData()); 
      //String str2 = selectedVideo2Path.toString(); 
      // e2.setText(str2); 
      Toast.makeText(MergeVideosActivity.this, "Path 2 : "+selectedVideo2Path, Toast.LENGTH_SHORT).show(); 

     } else { 
      Toast.makeText(getApplicationContext(), "Failed to select video", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Das ist mein getPath method

public String getPath(Uri uri) { 
    int column_index = 0; 
    String[] projection = {MediaStore.Images.Media.DATA}; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    if (cursor != null) { 
     column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
     cursor.moveToFirst(); 

    } 
    return cursor.getString(column_index); 
} 

Ausgewählte Video aus der Galerie hoffe, dass ich sein OK? Prüfen Sie es

public void selectVideoFromGallery() { 
     if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { 
      intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI); 
     } else { 
      intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.INTERNAL_CONTENT_URI); 
     } 
     intent.setType("video/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
    } 
} 
+0

welche Version von Android Sie verwendet zu testen. – USKMobility

+0

NeXus 4 (5.1.1) API 22 –

+0

Es gibt keine Voraussetzung für "ACTION_GET_CONTENT", um Ihnen ein 'Uri' zurückzugeben, das einer Datei zugeordnet ist, auf die Sie zugreifen können. Der Benutzer kann eine Datei auf einem Wechselspeicher oder im internen Speicher einer anderen App (z. B. Dropbox) oder einer verschlüsselten Datei usw. auswählen. Je eher Sie aufhören, über Dateipfade zu denken, desto wahrscheinlicher ist es für Sie wird Erfolg haben. – CommonsWare

Antwort

9

Aktualisieren Sie Ihre getPath Methode

public String generatePath(Uri uri,Context context) { 
     String filePath = null; 
     final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 
     if(isKitKat){ 
      filePath = generateFromKitkat(uri,context); 
     } 

     if(filePath != null){ 
      return filePath; 
     } 

     Cursor cursor = context.getContentResolver().query(uri, new String[] { MediaStore.MediaColumns.DATA }, null, null, null); 

     if (cursor != null) { 
      if (cursor.moveToFirst()) { 
       int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 
       filePath = cursor.getString(columnIndex); 
      } 
      cursor.close(); 
     } 
     return filePath == null ? uri.getPath() : filePath; 
    } 

    @TargetApi(19) 
    private String generateFromKitkat(Uri uri,Context context){ 
     String filePath = null; 
     if(DocumentsContract.isDocumentUri(context, uri)){ 
      String wholeID = DocumentsContract.getDocumentId(uri); 

      String id = wholeID.split(":")[1]; 

      String[] column = { Media.DATA }; 
      String sel = Media._ID + "=?"; 

      Cursor cursor = context.getContentResolver(). 
        query(Media.EXTERNAL_CONTENT_URI, 
          column, sel, new String[]{ id }, null); 



      int columnIndex = cursor.getColumnIndex(column[0]); 

      if (cursor.moveToFirst()) { 
       filePath = cursor.getString(columnIndex); 
      } 

      cursor.close(); 
     } 
     return filePath; 
    } 
+0

verursacht durch: java.lang.NullPointerException: Versuch, die virtuelle Methode 'android.content.pm.PackageManager android.content.Context.getPackageManager()' für eine Nullobjekt-Referenz –

+0

aufzurufen, ersetzen Sie den Kontext durch Ihre Aktivitätsinstanz wie yourActivity.this – USKMobility

+2

Dies sollte die richtige Antwort sein. Vielen Dank. – airowe