0

私が持っている複数のWebビューからキャッシュをクリアできない理由を理解しようとすると、以下のコードを持っているときに強制終了エラーが発生するようです。ただし、Webビューが1つしかない場合は、正常に機能します。提案の人。

複数のWebビューが原因で機能しないセクション

Preference customPref = (Preference) findPreference("clearcache");
customPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        // When Cache Preference is clicked
        public boolean onPreferenceClick(Preference preference) {
            Toast.makeText(getBaseContext(), "Cache Cleared",
                    Toast.LENGTH_LONG).show();          
            WebViewClientDemoActivity.web.clearCache(true);
            Commercial.web4.clearCache(true);
            Community.web2.clearCache(true);
            Distributors.web6.clearCache(true);
            Downloads.web7.clearCache(true);
            EnlightenInfoPage.web4.clearCache(true);
            Support.web3.clearCache(true);
            return false;
        }
    });

これだけで動作します

WebViewClientDemoActivity.web.clearCache(true);

ウェブビューのすべてはインデッドウェブビューであり、慣れています。私が持っていないステートメントのもの、またはそのようなものです。

または、データではなくアプリケーションのキャッシュをクリアする方法を知っている場合は、onPreferenceClickを使用してキャッシュするだけです。

LOGCAT

08-29 20:46:14.413: E/AndroidRuntime(337): FATAL EXCEPTION: main
08-29 20:46:14.413: E/AndroidRuntime(337): java.lang.NullPointerException
08-29 20:46:14.413: E/AndroidRuntime(337):  at com.jaisonbrooks.enlighten.Prefs$1.onPreferenceClick(Prefs.java:60)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.preference.Preference.performClick(Preference.java:812)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:190)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.widget.ListView.performItemClick(ListView.java:3382)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.os.Handler.handleCallback(Handler.java:587)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.os.Handler.dispatchMessage(Handler.java:92)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.os.Looper.loop(Looper.java:123)
08-29 20:46:14.413: E/AndroidRuntime(337):  at android.app.ActivityThread.main(ActivityThread.java:4627)
08-29 20:46:14.413: E/AndroidRuntime(337):  at java.lang.reflect.Method.invokeNative(Native Method)
08-29 20:46:14.413: E/AndroidRuntime(337):  at java.lang.reflect.Method.invoke(Method.java:521)
08-29 20:46:14.413: E/AndroidRuntime(337):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-29 20:46:14.413: E/AndroidRuntime(337):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-29 20:46:14.413: E/AndroidRuntime(337):  at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

1

Webビューの1つがnullである可能性があります。別のアクティビティのUI要素にアクセスするのは決して良いことではありません。さらに、すべてのアクティビティを少なくとも1回開始した場合にのみ、Webビューが初期化されます。Web要素ごとにnullチェックを追加します

if(Commercial.web4 != null)
     Commercial.web4.clearCache(true);

しかし、静的な要素を持つのは悪い設計だと思います。これらのアクティビティにインスタンスを1つだけ含めることはできますか?すべてのアクティビティがシングルトンであることを確認する必要があります

編集:

自分のアプリのCachedirectoryを削除したい場合は、

try {
        File dir = context.getCacheDir();
        if (dir != null && dir.isDirectory()) {
            deleteDir(dir);

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
于 2012-08-29T23:02:50.113 に答える