レイアウトにWebビューがあります。デフォルトでは、検索フォームが開かれます。検索時には、検索フォームの下にリストセクションが表示されます。リスト内のリンクをクリックすると、詳細ページが開きます。次に、WebViewのバックナビゲーションを制御します。このコードをActivityに配置しました。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d("TYPE", TYPE);
WebView myWebView = null;
if (TYPE.equalsIgnoreCase("REPORT_ACTIVITY"))
myWebView = reportView;
if (TYPE.equalsIgnoreCase("FEEDBACK_ACTIVITY"))
myWebView = feedbackView;
if (myWebView != null)
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
myWebView.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up
// to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
}
private WebViewClient webViewClient = new WebViewClient() {
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d("onPageStarted", "onPageStarted");
loadProgressBarBox.setVisibility(View.VISIBLE);
//view.setVisibility(View.GONE);
}
public void onPageFinished(WebView view, String url) {
Log.d("onPageFinished", "onPageFinished");
loadProgressBarBox.setVisibility(View.GONE);
}
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
Log.d("Error", "Error code: " + errorCode + "/" + description);
}
}
また、WebViewでWebViewClientを設定しました。戻るボタンを使用して戻ると、バージョン4.4で正常に動作します。しかし、Android 4.4で試してみると、詳細ページからリストページに問題なく戻ってきます。説明にあるページは表示されません。
09-04 06:59:05.666: D/Error(1102): Error code: -1/net::ERR_CACHE_MISS
Android 4.4でこの問題を解決するには?
このエラーは、実際にはほとんどの場合、アプリケーションの外部から発生します(場合によっては、INTERNET
権限が欠落しているだけですが、ここの場合のようには聞こえません)。
私は説明を入力していましたが、 別の質問に対するこの回答 の説明を兼ねたもっと簡単な例を見つけました。少し再ハッシュした関連ビットを次に示します。
no-cache
とマークされた確認/受信ページを返します。つまり、常にサーバーから要求されます。問題はその最後のステップから発生します。確認ページにはno-cache
のマークが付いていたため、サーバーから再度要求する必要があります。ただし、同じページを正しく表示するには、最初に渡された同じデータを再度送信する必要があります。
これにより、前回と同じ情報を使用して新しいリクエストが行われているため、Joeは2回請求されます。ジョーは、自分のアカウントで2件の料金を請求し、玄関先で追加のテントを見つけたとき、幸せなキャンピングカーではありません。
この状況は十分に一般的だったようで、現在ではほとんどのブラウザ、および明らかに新しいバージョンのAndroidで標準エラーになっています。このエラーは実際にはChromiumから発生しているため、Google Chromeでも同じエラーが表示され、4.4(WebViewの新しいバージョン Chromiumに基づく )でのみ表示されます。
実際、おそらくあなたは実際にそれを見たことがあるでしょう。ほとんどのブラウザに表示されるメッセージです。「このページを更新するには、ブラウザはデータを再送信する必要があります...ヤダヤダヤダ」という行に沿って警告します。
これはAndroid 4.4が何が起こっているかを警告する方法です。それを修正する方法は実際に接続しているものによって異なりますが、この状況を検索すると、エラーの正確なトリガーは、実際にはリクエストをキャッシュから処理できない場合です(この場合、no-cache
が原因です)。
リクエストの性質によっては、no-cache
は実際には必要ないかもしれません。
しかし、アプリケーションの観点から見ると、主な問題は、onReceiveError
がWebViewの一種の「最後の手段」であることです。そこに表示されるエラーは、基礎となるシステムから伝播しています。そして、いったん終了すると、ページの読み込みを続行できません、そのままです。したがって、その再送を許可する機会はなく、Google Chromeのように、ユーザーにそのオプションを与えることはできません。
私のマニフェストフォルダーでは、インターネットアクセス許可が大文字になっていたため、同じ問題に遭遇しました。
ありました(エラー)
<uses-permission Android:name="Android.PERMISSION.INTERNET"/>
あるべき(エラーなし)
<uses-permission Android:name="Android.permission.INTERNET"/>
つかいます
if (Build.VERSION.SDK_INT >= 19) {
mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
WebViewのERR_CACHE_MISSを修正します。 Lollipop WebViewの更新後、SDK_INT == 19に変更する必要があるかもしれませんが、今のところは動作します。
andriodManifest.xmlファイルのこの許可
<uses-permission Android:name="Android.permission.INTERNET"/>