发布到 HTTPS URL 时,Android WebView.postUrl() 显示空白屏幕

Posted

技术标签:

【中文标题】发布到 HTTPS URL 时,Android WebView.postUrl() 显示空白屏幕【英文标题】:Android WebView.postUrl() showing blank screen when posting to HTTPS URL 【发布时间】:2011-10-04 10:54:58 【问题描述】:

在我的 android 应用程序中,我将数据从 WebView 发布到 https servlet URL,如下所示

String postData = "fileContents=" + fileCon;
WebView.postUrl(url, EncodingUtils.getBytes(postData, "BASE64"));

上面代码中的 URL 是一个 servlet URL,我必须为它发布一些数据,然后从那里重定向到其他一些 URL。

当 servlet URL 只是 HTTP 时,上面的代码运行良好。但是改成HTTPS后,却是黑屏。

我为 android HTTPS 问题尝试了以下解决方案: http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/

我从onCreate()方法中删除了上面的代码并尝试了下面的代码

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("fileContents", fileCon));
DefaultHttpClient client = new MyHttpClient(getApplicationContext());
try    
    HttpPost request = new HttpPost(url);
    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
    request.setEntity(formEntity);
    HttpResponse resp = client.execute(request);
 catch(Exception e)
    e.printStackTrace();

现在我可以发布数据并从那里进行重定向。但我仍然看到一个空白屏幕。

是因为我没有loadUrlpostUrl 我看到一个空白屏幕吗?

或者我应该把上面的代码放在WebView的任何方法中?

【问题讨论】:

试试这个***.com/a/10970539/1008278 【参考方案1】:

试试这个

    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
    postParameters.add(new BasicNameValuePair("fileContents", fileCon));
    DefaultHttpClient client = new MyHttpClient(getApplicationContext());
try    
    HttpPost request = new HttpPost(url);
    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
    request.setEntity(formEntity);
    HttpResponse resp = client.execute(request);

    //Get data
     HttpEntity entity = resp.getEntity();
     InputStream is = entity.getContent();
     String data = convertStreamToString(is);
     browser=(WebView)findViewById(R.id.myWebView);
     browser.loadData(data,"text/html", "UTF-8");
 catch(Exception e)
    e.printStackTrace();

InputStream转String方法:

private static String convertStreamToString(InputStream is) 

BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();

String line = null;
try 
    while ((line = reader.readLine()) != null) 
        sb.append((line + "\n"));
    
 catch (IOException e) 
    e.printStackTrace();
 finally 
    try 
        is.close();
     catch (IOException e) 
        e.printStackTrace();
    

return sb.toString();

【讨论】:

以上是关于发布到 HTTPS URL 时,Android WebView.postUrl() 显示空白屏幕的主要内容,如果未能解决你的问题,请参考以下文章

android:用毕加索创建圆形图像

Android开发—错误记录1:W/System.err: java.net.ConnectException: Connection refused

IIs 8 将 URL 从 http 重定向到 https

URL 图像不会设置为 ImageView Android

当URL相似时,Android WebView canGoBack()返回false

在 webview Android 中检测到 url 时如何更改活动