#android #webview #http-post
#Android #webview #http-post
Вопрос:
Я пробовал этот пример, и он отлично работает с примером URL ( http://search.yahoo.com/search
), но когда я делаю это для «http://www.ilias.de/docu/login.php?target=amp;client_id=docu «, я не могу правильно увидеть ответ в webview. Я имею в виду, что весь текст виден, а изображения — нет. И ссылки не работают.
Как мне решить эту проблему?
public class ilias extends Activity {
WebView webView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView)findViewById(R.id.webview);
BufferedReader bufferedReader = null;
HttpClient httpClient = new DefaultHttpClient();
HttpPost request = new HttpPost("http://www.ilias.de/docu/login.php?client_id=docu");
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("username", "stacked")); //This username
postParameters.add(new BasicNameValuePair("password", "overflow")); //works.
try {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParameters);
request.setEntity(entity);
HttpResponse response= httpClient.execute(request);
bufferedReader = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
StringBuffer stringBuffer = new StringBuffer("");
String line = "";
String LineSeparator = System.getProperty("line.separator");
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line LineSeparator);
}
bufferedReader.close();
Toast.makeText(ilias.this,
"Finished",
Toast.LENGTH_LONG).show();
String webData = stringBuffer.toString();
webData = webData.replace("#", "#");
webData = webData.replace("%", "%");
webData = webData.replace("\", "'");
webData = webData.replace("?", "?");
webView.loadData(webData,
"text/html",
"UTF-8");
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(ilias.this,
e.toString(),
Toast.LENGTH_LONG).show();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(ilias.this,
e.toString(),
Toast.LENGTH_LONG).show();
}
finally{
if (bufferedReader != null){
try {
bufferedReader.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
Это то, что у меня есть: http://img64.imageshack.us/img64/4913/deviceyl.png , и это то, чего я хочу: http://img200.imageshack.us/img200/8591/device1g.png
Комментарии:
1. Попробуйте опубликовать свой код для отладки
Ответ №1:
Я думаю, вам нужно использовать
loadDataWithBaseURl("http://www.ilias.de/docu/",webData,"text/html","UTF-8","about:blank");
вместо
webView.loadData(webData, "text/html", "UTF-8");
Согласно ссылке, «простой» метод loadData не загружает содержимое из сети.
@@@@@@@ РЕДАКТИРОВАТЬ @@@@@@@
Чтобы увидеть страницу так же, как в родном браузере, сначала удалите эти строки:
webData = webData.replace("#", "#");
webData = webData.replace("%", "%");
webData = webData.replace("\", "'");
webData = webData.replace("?", "?");
Это связано с тем, что либо я не понимаю документацию API, либо loadDataWithBaseUrl не расшифровывает символы обратно.
И поиграйте с уровнем масштабирования (вы можете сделать это программно)
С уважением
Комментарии:
1. это работает лучше, но я продолжаю без просмотра веб-страницы, как в родном Explorer или pc Internet Explorer.
2. @AlexxPerez вы можете быть более конкретными?
3. Я не вижу страницу как оригинал, но выглядит немного одинаково. Мне нужно видеть это как оригинал, пожалуйста. Вы можете протестировать код, имя пользователя и пароль. Просто добавьте webview в main.xml и разрешите интернет, и вы увидите.
4. Кроме того, когда я нажимаю на ссылку, она не распознает меня как зарегистрированного
5. Привет @AlexxPerez, это другая проблема, скриншот, который вы видите, — это то, что я получил, делая то, что я написал, я думаю, это был главный вопрос… Чтобы сохранить учетные данные, я думаю, вам следует установить пользовательский WebViewClient и переопределить
shouldOverrideUrlLoading(WebView view, String url)
. Я думаю, вам следует решить первую проблему, выполнив то, что я написал, подумать об обходном пути и задать новый вопрос на случай, если вы не сможете его решить.