- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 API 17 模拟器测试包含 WebView 的页面。
我无法在 KitKat、Lollipop 或 Gingerbread 上重现同样的问题……到目前为止,我只能在 Jellybean 和 Ice Cream Sandwich 上重现这个问题……
我还确认这是运行 Jellybean 的实际 Nexus 7 设备上的一个问题,因此它不仅仅是模拟器的问题。
注意:我对使用类似 android:configChanges="orientation|keyboardHidden"的东西不是特别感兴趣。据我了解,这可能会解决我的轮换问题,但如果由于其他原因需要恢复 Activity 状态,问题可能仍会再次出现。
第 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);
}
}
执行 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>
最佳答案
浏览器它做得很好(虽然这对我们来说很痛苦),你有两种方法:
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();
}
}
});
您可以按错误代码过滤以在需要时返回,在某种错误中您可以返回其他地方做其他事情。我不知道哪个错误会引发此 POST 请求,或者您是否希望在其他情况下进行更多过滤,所以我确定您可以使用它进行细粒度过滤。
编辑:这里有可能的错误代码 WebViewClient Error Codes
希望对您有所帮助。
关于android - Jellybean/ICS Android HTTP Post 方法 + WebView.RestoreState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29483016/
我正在开发目标 Sdk 17 的应用程序。我当前的设备是 Nexus 7。 我的应用应该没有操作栏,所以我在 Activity 中使用主题Theme.Holo.NoActionBar。 我想在右下角(
当某些应用程序完成安装或更新时,应用程序的启动器图标与安装通知一起放置,如下所示: 如何让我的应用程序的图标在安装完成时也显示出来? 最佳答案 答案是你不知道。您在此处看到的 Google 日历通知来
我正在为 Jellybean、KitKat 和 Lollipop 以及多种不同的设备开发 Android 应用。 在项目开始时,我使用 Jellybean API 库和目标 API“anroid-18
我有一个带有 RelativeLayout 的应用程序,其中包含一个 ProgressBar 和一个 WebView。没有什么复杂的。但是,我遇到了一个非常奇怪的崩溃,我什至没有看到 ANR 对话框。
所以...我阅读了 jellybean 更新说明并看到“Jelly Bean 为付费应用引入了应用加密。” 据我所知,当有人将其 apk 移动到另一台设备时,此服务应该会使应用程序无法使用。 但是非软
我有一个播放 MP3 文件的应用程序,这些文件可以在公共(public) URL 上找到。不幸的是,服务器不支持流媒体,但 Android 使用户体验相当可以接受。 除 JellyBean 外,它适用
源代码在这里:https://github.com/novemberox/NavigationTest此示例的修改版本:http://developer.android.com/training/im
看起来 Google 已经为第三方应用提供了 Google Now 的离线语音识别功能。 the app named Utter 正在使用它. 有没有人看到过如何使用这个离线语音记录来执行简单的语音命
我刚买了一台新的 lenovo A3500 (A7-50) 平板电脑,带有 4.2.2 jellybean 系统。我的电脑在 widows 8 上运行。当我通过 USB 电缆连接我的平板电脑时,com
我有一个 Android 应用程序,它在引用的库中使用 Gson jar。我目前使用的是 2.2.4 版本,我有 2 部手机来测试它。 在 Samsung Galaxy S Advance 2.3.6
我刚刚将我的 Galaxy Tab2 从 ICS 软件更新到 Jelly Bean。我正在开发一个应用程序,我在其中加载一些带有一些 js 文件的 Html,调用一些用 Javascript 文件编写
我想做的是从我的应用程序调用电话并在此通话中打开扬声器。 在 android 4.0 上一切正常,我只是在开始调用 Intent 之前设置了 audiomanager.setSpeakerphoneO
我发现 2.3.4 和 4.2 之间 onNewIntent 调用的行为有所不同。 我有一个 launchMode=singleTask Activity 。根据我对 singleTask 工作原理的
谁能阐明在 JellyBean [Android] 的服务中引入 Isolatedprocess 标签的真正/主要优势是什么?这在框架级别或内核级别是否有利,正如我们所看到的那样,在服务中将 isol
我制作了一个 XML,其中包含一个 TextView,在以下代码中有一个 textAlignement:center:
我们正在使用 phonegap 3.2.2 开发一个 Android 混合应用程序。 在其中一个 html 页面中,我们正在渲染一个“svg”元素,其中包含 svg 中的“path”元素。每个路径元素
这是我正在使用的代码 Intent i = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTU
Jellybean 键盘有一个奇怪的问题。当我的用户升级他们的操作系统时,每当他们尝试使用键盘输入数据时,它就是无法输入。期间。 这很奇怪,因为您确实可以专注于文本区域,但在键盘上打字却没有输出。 有
我正在使用 JQM 开发一个移动网站,但在为 Android 版本 4 及更高版本设置正文时遇到问题。地址和主题工作。 这是代码。 var shareEmail = "mailto:"+thisAdd
当 ICS 出现时,引入了几个新的扩展宽度字节码。其中大部分是用于支持巨型 ID 的说明。以下是其中一些新指令,取 self 的 ics/dalvik/opcode-gen/bytecode.txt:
我是一名优秀的程序员,十分优秀!