2012-08-16 4 views
1

인터넷이 연결되어 있지 않을 때 캐시에서 웹 사이트를로드하려고합니다. 여기오프라인 모드에서 웹 사이트로드

browse.getSettings().setJavaScriptEnabled(true); 
    browse.getSettings().setPluginsEnabled(true); 
    browse.getSettings().setLoadWithOverviewMode(true); 
    browse.getSettings().setUseWideViewPort(true); 
    browse.getSettings().setBuiltInZoomControls(true); 
    browse.getSettings().setSupportZoom(true); 
    browse.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    browse.setScrollbarFadingEnabled(true); 
    browse.getSettings().setLoadsImagesAutomatically(true); 
    browse.getSettings().setAppCacheMaxSize(1024 * 1024 * 100); 
    browse.getSettings().setAppCacheEnabled(true); 

    if (cm.getActiveNetworkInfo().isConnected()) 
     browse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
    else 
     browse.getSettings().setCacheMode(
       WebSettings.LOAD_CACHE_ELSE_NETWORK); 

    browse.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      // TODO Auto-generated method stub 
      super.onPageStarted(view, url, favicon); 
      t.setVisibility(TextView.VISIBLE); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      t.setVisibility(TextView.GONE); 
     } 
    }); 

    try { 
     browse.loadUrl(address); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

내가 다음 그리고 난 브라우저를 다시 시작하는 경우에도 이전에 방문한 웹 페이지를로드하는 데 노력하고있어 tutorial있어 : 여기 설정에서 onCreate에서 웹보기는 방법입니다. 작동하지 않습니다! 도와주세요.

P.S : SO 관련 코드를 모두 검색했지만 그 중 아무 것도 작동하지 않습니다.

+0

게시자 : logcat .... – nhaarman

+0

완료 ... –

+2

08-16 15 : 03 : 17.080 : E/AndroidRuntime (2827) : 원인 : java.lang.SecurityException : ConnectivityService : 사용자 10056도 현재 프로세스도 android.permission.ACCESS_NETWORK_STATE가 없습니다. <- 그것이 원인입니다! – t0mm13b

답변

5

매니페스트 파일에 다음과 같은 권한을 선언 :

android.permission.ACCESS_NETWORK_STATE 
+0

이번에는 응용 프로그램이 작동하지 않지만이 방법은 목적을 달성하지 못하고 페이지가 오프라인 모드로로드되지 않습니다. –

+0

그런 다음 새 logcat을 포함하도록 질문을 업데이트하십시오. – poolie

+0

logcat에는 이상한 점이 하나도 없습니다.그것은 인터넷이 연결될 때 데이터가 수신되고 그렇지 않을 때 아무것도 표시하지 않음을 나타냅니다. –

1

을 당신이 또한 WebSettings.setAppCacheEnabled(true) :

에 전화를 누락 생각 나는 연결을 확인하기 전에 setCacheMode() 전화를 아마 더 좋은 생각 너무 늦은 것 같아 onPageStarted() 방법 대신에서 loadUrl()으로 전화하십시오.

마지막으로 오버라이드에서 기본 구현을 호출하기 때문에 getCacheDir()의 오버라이드가 필요한지 확실하지 않습니다.

UPDATE :

질문에서 업데이트 된 코드를 찾고 후, 나는 괜찮 았는데 유사한 코드를 확인할 수 있습니다. 버전에

final NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo(); 
    if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { 
     settings.setCacheMode(WebSettings.LOAD_DEFAULT); 
    } else { 
     settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
    } 

비교 :

if (cm.getActiveNetworkInfo().isConnected()) 
     browse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
    else 
     browse.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 

내가 에뮬레이터에서 실행 켜거나 비행기 모드를 전환하여 테스트를 유일하게 주목할만한 차이는 연결을 검사 할 때 나는 다음과 같은 코드를 가지고있다.

나는 그러나 어쩌면 당신은 여전히 ​​당신의 활동의 onDestroy()WebView.clearCache(true)를 호출하는 경우 궁금 (당신이 당신의 원본 코드에 getCacheDir()를 오버라이드 (override) 왜 지금은 이해) 더 밀접하게 연결 자습서를 읽었다. 수정되지 않은 튜토리얼에서 여전히 그 부분을 가지고 있다면 분명히 캐시가 작동하지 않는 것처럼 보일 것입니다. :)

+0

효과가 있습니까? 나는 당신이 아직도 그것을 작동하지 않는다는 코멘트를 삭제 참조하십시오. – Joe

+0

아니, 그것은 누군가가 귀하의 소스 코드를 수정하도록 요청하는 것은이 사이트에 적합하지 않다고 생각하는 의견을 삭제 한 것입니까, 그렇지 않습니까? –

+0

아, 내가 어떻게 든 해결 되었기 때문에 제거했다고 생각했습니다 :) 글쎄, 제안한 변경 사항으로 코드를 업데이트해도 여전히 작동하지 않습니다. – Joe

1

nanoHttpd 웹 서버를 사용해 본 적이 있습니까? sdcard 또는 로컬 메모리의 액세스 웹 페이지를 얻는 간단한 방법입니다. 모두 당신은 같은 페이지로 경로를 제공한다 싶지에 http : // localhost를 : 나는 sdcard에 전화 메모리의 페이지에이 시도 웹뷰

https://gist.github.com/1893396

에서 8081/[오프라인 웹 페이지 캐시 directry 경로, 이게 당신을 위해서 일할 수 있기를 바랍니다.

관련 문제