我正在尝试在Webview中显示一个结果网页,但在Android 4.0以下版本上出现了奇怪的结果。我有一张屏幕截图,展示了差异。
在Android 4.0以上的版本上,它显示正确,并且在我的Galaxy S2上运行良好,但是在两部带有Android 2.2和2.3的三星手机以及模拟器上显示错误。我尝试使用Android 3.0的模拟器,结果相同。需要注意的是,该网页在浏览器上可以正常工作,我有一种感觉,这个网站可能会进行一些重定向,如果有帮助的话。
以下是我用来加载页面的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
WebView webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
// Show the web page
webView.loadDataWithBaseURL(null, MainActivity.content, "text/html",
"UTF-8", null);
}
并且图片。
有什么想法,为什么在所有Android版本上都不能正常工作?
更新 经过多个版本的WebViews尝试加载网站URL,并使用不同的设置,发现该网站在Android 4以下的设备上无法正确加载。我陷入了困境。
更新1
我注意到在旧版本中,问题不是页面无法正确加载,而是它尝试加载页面的网络版本而不是移动版本。我尝试更改用户代理,但没有任何区别。
更新2
我尽可能地查找了关于WebViews和内容加载的所有信息,但是我无法确定问题所在。这是我的代码,虽然只有启用Java脚本时才能正常工作。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
WebView webView = (WebView) findViewById(R.id.webView1);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setPersistentDrawingCache(0);
webView.setInitialScale(1);
webView.getSettings().setDefaultTextEncodingName("utf-8");
String webData = MainActivity.content;
webData = webData.replace("#", "%23");
webData = webData.replace("%", "%25");
webData = webData.replace("\\", "%27");
webData = webData.replace("?", "%3f");
webView.getSettings()
.setUserAgentString(
"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3");
webView.loadData(webData, "text/html; charset=UTF-8", null);
}
// webView.loadDataWithBaseURL(MainActivity.url, MainActivity.content,
// "text/html", "UTF-8", null);
// webView.loadData(MainActivity.content, "text/html; charset=utf-8",
// "UTF-8");
我有什么遗漏的吗?
此外,如果有帮助的话,这是我获取 HTTP Post 响应并用于在 Webview 中显示的代码:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://www.fernbus24.de/bus-"
+ vonCopy + "-" + nachCopy);
url = "http://www.fernbus24.de/bus-" + vonCopy + "-" + nachCopy;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("_searchbox",
"d5ed667846"));
nameValuePairs.add(new BasicNameValuePair("von", von));
nameValuePairs.add(new BasicNameValuePair("nach", nach));
nameValuePairs.add(new BasicNameValuePair("datum", datum));
// etc...
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpClient.execute(httpPost);
InputStream is = response.getEntity().getContent();
Log.i("Test", "response status"
+ response.getStatusLine().getStatusCode());
InputStreamReader inputStreamReader = new InputStreamReader(is);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
String bufferedStrChunk = null;
while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
stringBuilder.append(bufferedStrChunk);
}
content = stringBuilder.toString();
Log.i("Test", "content is " + content);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
更新3
我尝试设置webView.setInitialScale(50);,结果如下图所示: