Для одного из моих проектов я пытаюсь отобразить страницу, которую я получаю из Интернета, в веб-просмотре, но изменяя ее, прежде чем я это сделаю. И я делаю то же самое для всех URL-адресов, которые вы выбрали из этого веб-представления.Изменение данных, отображаемых в WebView
Для достижения этой цели я первый сделал класс, который расширяет WebView, и добавил метод loadAlteredUrl(String url)
public void loadAlteredUrl(String url) {
String page = getURLContent(url);
String filtered;
// Code for altering the webpage
super.loadData(filtered, "text/html", "UTF-8");
//super.loadUrl("data:text/html;UTF-8," + filtered);
}
private String getURLContent(String url)
{
try{
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet, localContext);
String result = "";
BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()
)
);
String line = null;
while ((line = reader.readLine()) != null){
result += line + "\n";
}
return result;
} catch (IOException ex) {
return "IOEXCEPTION";
}
Этот код был проверен и прекрасно работает. Но теперь я мог только изменить свою первую загруженную страницу, и это было не то, что я хотел. Таким образом, я расширил класс WebViewClient и перегружает функцию shouldOverloadUrl:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
EnhancedWebview myview = (EnhancedWebview) view;
if(!url.contains("http://")){
if(url.substring(0, 1).equals("/"))
url = url.substring(1);
myview.loadAlteredUrl(MainWindow.baseUrl + url);
return true;
}
return false;
}
Странная это, однако, этот код работает только половину времени. Когда я отлаживаю этот код, он всегда проходит одни и те же шаги, но по какой-то странной причине он откроет только URL-адрес, если я на самом деле дважды щелкнул его или больше. У меня есть ощущение двойного щелчка (или даже щелчка спамом при необходимости) «ломает» что-то из внутренней работы, из-за чего она работает правильно, потому что, когда я использую ее так, как она должна использоваться, она проходит все необходимые шаги, t загрузите страницу (даже если страница загружена с использованием моих собственных методов и т. д.).
У кого-нибудь есть представление о том, что здесь отсутствует?
У вас есть источник для этого заявления? Поскольку, насколько я могу видеть, отлаживая, shouldOverrrideUrlLoading() вызывается каждый раз, когда URL-адрес кликается в webview. –
Там, где несколько отчетов об ошибках. В этом случае исправление предлагается: http://code.google.com/p/android/issues/detail?id=812 –