#android #android-webview
#Android #android-webview
Вопрос:
Мне нужно прочитать содержимое html вместо того, чтобы показывать его в webview при выполнении последовательности транзакций с использованием webview, например, онлайн-платежей с использованием webview. Как только он дойдет до последней страницы, я проверю URL-адрес в обратном вызове onPageFinished и создам URLConnection для чтения входного потока. Но это всегда пустое содержимое, хотя в конечном webview есть некоторый контент на экране.
public class mWebClient extends WebViewClient {
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
// Utils.displayLogs("<<<<<< mydebug >>>>>>>", "onLoadResource : "
// url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
Utils.displayLogs("<<<<<< mydebug >>>>>>>", "Url : " url);
if (mProgressDialog != null amp;amp; !mProgressDialog.isShowing())
mProgressDialog.show();
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
// Utils.displayLogs("<<<<<< mydebug >>>>>>>", "Url : " url);
if (url.endsWith("finalSuccessPage.aspx")
|| url.endsWith("finalErrorPage.aspx")) {
try {
List<String> vals = checkSuccessContent(url);
if (vals != null amp;amp; vals.size() > 0) {
Log.d("<<<<<<mydebug >>>>>>", "vals[0] : "
vals.get(0));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.onPageFinished(view, url);
if (mProgressDialog != null amp;amp; mProgressDialog.isShowing())
mProgressDialog.dismiss();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
private List<String> checkSuccessContent(String url) throws IOException {
List<String> vals = new ArrayList<String>();
if (url.endsWith("finalSuccessPage.aspx")
|| url.endsWith("finalErrorPage.aspx")) {
URL tUrl = new URL(url);
URLConnection con = tUrl.openConnection();
Reader r = new InputStreamReader(con.getInputStream());
StringBuilder buf = new StringBuilder();
while (true) {
int ch = r.read();
if (ch < 0)
break;
buf.append((char) ch);
}
String str = buf.toString();
if (str.contains(Constants.STR_SUCCESS)) {
String[] lVals = str.split("~");
if (lVals != null) {
for (int i = 0; i < lVals.length; i ) {
vals.add(lVals[i]);
}
}
}
}
return vals;
}
}
Заранее спасибо,
JRH
Комментарии:
1. Не вызывайте loadUrl из shouldOverrideUrlLoading .
shouldOverrideUrlLoading
вызывается для подкадров со схемами, отличными от https. Если вы перейдете на страницу, например jsbin.com/gupug/1/quiet ваш код в конечном итоге вызовет view.loadUrl(‘tel: 1234’), и в конечном итоге вы увидите страницу с ошибкой, поскольку webview не знает, как загрузить tel: URL.2. ожидает ли сервер, что некоторые файлы cookie будут на месте? См. eshyu.wordpress.com/2010/06/27 /…