cra*_*s84 9 android http-post webview
我正在使用API 17模拟器来测试包含Web视图的页面.
我无法在KitKat,Lollipop或Gingerbread上重现同样的问题......到目前为止,我只能在Jellybean和Ice Cream Sandwich上重现这个问题......
我也确认这是运行Jellybean的实际Nexus 7设备的一个问题,因此它不仅仅是一个模拟器问题.
注意:我使用android:configChanges ="orientation | keyboardHidden"之类的东西并不是特别有趣.据我了解,这可能会解决我的轮换问题,但如果由于其他原因需要恢复活动状态,问题仍可能重新出现.
步骤#1:正常加载WebView

步骤#2:提交表单(使用HTTP Post方法)

步骤3:旋转屏幕以触发webview.restoreState - 发生错误

以下是一些与我的问题相关的示例代码.代码在Mono C#中,但应该与Java非常相似.
public class MainActivity : Activity
{
WebView webview;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
webview = new WebView(this);
SetContentView(webview);
if (bundle == null)
webview.LoadUrl("http://2-dot-npwc-services.appspot.com/test-post.jsp");
else
webview.RestoreState(bundle);
}
protected override void OnSaveInstanceState(Bundle bundle)
{
base.OnSaveInstanceState(bundle);
webview.SaveState(bundle);
}
}
Run Code Online (Sandbox Code Playgroud)
执行POST方法的示例HTML页面如下所示:
<html>
<form action="test-post.jsp" method="post">
<input type="text" name="test" value="test"/>
<input type="submit"/>
</form>
<p>You entered: <%=request.getParameter("test")%></p>
</html>
Run Code Online (Sandbox Code Playgroud)
浏览器做得很好(尽管这对我们来说很痛苦),你有两种方法:
1-保留 webView 实例并恢复状态,像你说的那样添加android:configChanges="orientation|keyboardHidden"
2- 或再次重新加载帖子请愿书。
我选择第一页,如果出现错误,我将返回到最后一页。制作静态内容,因此在轮换时没有网络或每次轮换都需要新的请愿书,如果没有,在服务器端也会很痛苦。
要实现“如果错误返回”,您需要设置一个自定义 WebClient 并重写此方法
webview.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView webView, int errorCode, String description, String failingUrl) {
if ( webView.canGoBack() ) {
Toast.makeText(MainActivity.this, R.string.error_web, Toast.LENGTH_SHORT).show();
webView.goBack();
}
}
});
Run Code Online (Sandbox Code Playgroud)
您可以按错误代码过滤以在需要时返回,在某种错误中您可以返回执行其他操作。我不知道哪个错误引发了此 POST 请求,或者您是否希望在其他情况下进行更多过滤,因此我确信您可以使用它进行细粒度过滤。
编辑:这里有可能的错误代码 WebViewClient 错误代码
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |