2016-02-04 70 views
2

從我的應用程序中,我打開ACTION_GET_CONTENT的文檔來獲取視頻。我在onActivityResult()中獲得一個Uri,並使用它在我的應用程序中創建一個新的活動。除了一些三星設備,至少galaxy S5和galaxy S5 mini,它會在Intent.putExtra()中崩潰並帶有NullPointerException,這一般很好。某些三星設備上的Intent.putExtra()出現故障

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (requestCode == 1 && intent != null && intent.getData() != null) { 

     Intent i = new Intent(this, MyActivity.class); 

     Uri uri = intent.getData() 
     /** 
     * Galaxy S5 will crash here 
     */ 
     i.putExtra("uri", uri); 
     startActivity(i); 
    } 
} 

任何想法什麼可能是錯的?該URI本身不爲空,如果我登錄,我得到:

content://com.android.providers.media.documents/document/video%3A459 

我得到的日誌:

2016-02-04 11:05:09.120 ERROR: AndroidRuntime : Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 
2016-02-04 11:05:09.120 ERROR: AndroidRuntime : at android.content.Intent.putExtra(Intent.java:6471) 
2016-02-04 11:05:09.120 ERROR: AndroidRuntime : at com.mbonnin.app.ui.activity.MainActivity.onActivityResult(MainActivity.java:337) 
+0

「Intent」中沒有任何'putExtra'方法,它接受'Uri ',你如何在其他手機上編碼工作應該是關注的問題。嘗試按照@anshuljain – Rohit5k2

+1

@ Rohit5k2的建議發送數據爲'String',但有一個接受'Uri'實現的'Parcelable'。 –

回答

3

試試這個代碼

Bundle bundle = new Bundle(); 
bundle.putString("uri",uri.toString()); 
i.putExtras(bundle); 

在第二活動

Bundle bundle = getIntent().getExtras(); 
String uri = bundle.getString("uri"); 
+0

這很好,謝謝!聽起來真的很腥。任何想法爲什麼使用Parcelable將無法工作? – mbonnin

+0

@mbonnin:除了samsung s5之外,它適用於所有設備嗎? – thedarkpassenger

+0

@mbonnin:如果它解決了您的問題,您可以將此標記爲您的接受答案嗎? – thedarkpassenger