2016-06-01 10 views
4

In Android-Webview wird OnshowFileChooser aufgerufen, wenn die Datei-Upload-Option angeklickt wird, wo Intent für Benutzer Datei aus Upload auswählen aus Bildergalerie aufgerufen wird. nach Datei auswählen, innerhalb onActivityResult es aufgrund folgendem Grund abstürztAndroid-Webview, Datei-Upload, stürzt ab, wenn Ergebnis in onActivityResult

java.lang.IllegalStateException: Duplicate showFileChooser result 
     at org.chromium.android_webview.AwWebContentsDelegateAdapter$2.onReceiveValue(AwWebContentsDelegateAdapter.java:225) 
     at org.chromium.android_webview.AwWebContentsDelegateAdapter$2.onReceiveValue(AwWebContentsDelegateAdapter.java:220) 
     at com.android.webview.chromium.WebViewContentsClientAdapter$4.onReceiveValue(WebViewContentsClientAdapter.java:1063) 
     at com.android.webview.chromium.WebViewContentsClientAdapter$4.onReceiveValue(WebViewContentsClientAdapter.java:1047) 

Antwort

5
@Override 
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) { 
    mActivity.setValueCallback(filePathCallback); 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    intent.setType("*/*"); 
    mActivity.startActivityForResult(Intent.createChooser(intent, ""), Final.REQUEST_CODE_ALBUM); 
    return true; 
} 

return true

+1

"return true" war der Teil, der dieses Problem für mich fixiert. Danke. –

0

Ich glaube, Sie webview implementieren müssen und webview Chrom-Client erweitern Datei-Upload auf Ihrem Android zu handhaben Telefonanwendung. Sie können diese article lesen könnte Ihnen helfen zu verstehen, wie webview Client-Klasse und webchrome Client

0

kann es sein, zu implementieren, aufgrund von Daten in uri nehmen wird, und dann neues Objekt der uri Array zu machen. In C# habe ich unten getan Problem zu beheben: Code, den givinf doppelte Fehler war:

Android.Net.Uri result = data == null || resultCode != Result.Ok ? null : data.Data ; 
var a = new Android.Net.Uri[] { result }; 

Im Folgenden Code das Problem gelöst:

Android.Net.Uri[] result = data == null || resultCode != Result.Ok ? null : new Android.Net.Uri[] { data.Data };

1

Wenn Sie onShowFileChooser und Plan außer Kraft setzen auf Aufruf filePathCallback zu Übergeben Sie die Ergebnisse, müssen Sie von onShowFileChooser den Wert true zurückgeben, der besagt, dass der zugrunde liegende Code keinen Wert an filePathCallback übergibt.

wahren im Grunde sagen

Dokumentation "ich damit umgehen": @return true if filePathCallback will be invoked, false to use default handling.