Android WebView.postUrl () показывает пустой экран при публикации по URL HTTPS - PullRequest
5 голосов
/ 04 октября 2011

В моем приложении для Android я отправляю данные на https URL-адрес сервлета с WebView, как показано ниже

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

URL-адрес в приведенном выше коде - это URL-адрес сервлета, для которого мне нужно опубликовать некоторые данные, и оттуда я перенаправляю на другой URL-адрес.

Приведенный выше код работал нормально, когда 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();
}

Теперь я могу опубликовать данные, и оттуда они также перенаправляются. Но все равно я вижу пустой экран.

Это потому, что у меня нет loadUrl или postUrl Я вижу пустой экран?

Или я должен поместить приведенный выше код в любой метод WebView?

1 Ответ

0 голосов
/ 09 ноября 2012

Попробуйте это

    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 to 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();

}

...