2011-09-21 3 views
0

나는 웹 페이지를 표시하기 위해 webview를 사용하는 Android 앱을 개발 중입니다. 대부분의 코드는 webview와 관련이 있습니다. 내 주요 활동에는 특정 웹 사이트를 표시하는 웹보기가 포함되어 있습니다.Android에서 Webview 데이터베이스 손상

내 webview.db가 손상되면 오류를 방지하려고합니다. 그게 일반적인 상황은 아니지만 내 애플 리케이션이 충돌하지 않도록하고 싶습니다.

이 손상되었을 때 webview 데이터베이스에 액세스하려고하면 충돌이 발생합니다.

예외를 처리하기 위해 setUncaughtExceptionHandler 메소드를 추가했습니다. 나는 예외를 잡을 수 있지만 내 애플 리케이션을 다시 시작하려고 할 때 webview로드를 완료하지 마십시오.

나는 내 응용 프로그램을 "다시 시작"을 추적 코드를 시도 : 내 마지막 시도 후 나는 웹보기 데이터베이스를 제거, 오류 메시지를 표시하고 응용 프로그램을 닫습니다 일부 코드를 추가 실패했다
 Intent i = new Intent(context, Error.class); 
       i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(i); 

.

AlertDialog alertDialog = new AlertDialog.Builder(
        DiscoverMobile.this).create(); 
      alertDialog.setTitle("Error"); 
      alertDialog.setMessage("Application files have been deleted or corrupted. The app will close to fix this issue. You can restart the app later"); 
      alertDialog.setButton("OK", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, 
           int which) { 


          webview.getContext().deleteDatabase(
            "webview.db"); 
          webview.getContext().deleteDatabase(
            "webviewCache.db"); 
          WebViewDatabase webViewDB = WebViewDatabase 
            .getInstance(getBaseContext()); 

          System.exit(0); 
         } 
        }); 
      alertDialog.show(); 

이 것이 좋은 해결책일까요?

답변

1
Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    view.clearCache(true); 
} 

아마도이 방법을 시도했지만 WebView 캐시 크기를 약간 작게 설정할 수도 있습니다. 0이 작동하는지 모르겠습니다. 1 :

webview.getSettings().setAppCacheMaxSize(1);