2011-11-22 3 views
1

J'ai trouvé un code qui doit vérifier si l'application est hors ligne et doit charger le cache ou en mode en ligne et doit charger l'URL. Ce code je pour cela:Chargement du cache en mode hors connexion dans Android Webview

ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE); 
String weblink = "http://www.google.com"; 
if(cm.getActiveNetworkInfo().isConnected()){ 
    myWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
    myWebView.loadUrl(weblink); 
} else { 
    myWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
    myWebView.loadUrl(weblink); 
} 

Et ce sont mes autorisations:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permisson.ACCESS_WIFI_STATE"/> 

Mon problème: Quand je suis en mode avion ou mes connexions sont éteints. La force de l'application se ferme. Quand je suis en ligne, l'application se charge juste et agit normalement ... Qu'est-ce que je me suis trompé?

Ceci est mon logcat:

11-22 10:09:40.310: E/AndroidRuntime(323): FATAL EXCEPTION: main 
11-22 10:09:40.310: E/AndroidRuntime(323): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.martijngijselaar.rooster/com.martijngijselaar.rooster.SaxionRoosterActivity}: java.lang.NullPointerException 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.os.Looper.loop(Looper.java:123) 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-22 10:09:40.310: E/AndroidRuntime(323): at java.lang.reflect.Method.invokeNative(Native Method) 
11-22 10:09:40.310: E/AndroidRuntime(323): at java.lang.reflect.Method.invoke(Method.java:521) 
11-22 10:09:40.310: E/AndroidRuntime(323): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-22 10:09:40.310: E/AndroidRuntime(323): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-22 10:09:40.310: E/AndroidRuntime(323): at dalvik.system.NativeStart.main(Native Method) 
11-22 10:09:40.310: E/AndroidRuntime(323): Caused by: java.lang.NullPointerException 
11-22 10:09:40.310: E/AndroidRuntime(323): at com.martijngijselaar.rooster.SaxionRoosterActivity.onCreate(SaxionRoosterActivity.java:34) 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-22 10:09:40.310: E/AndroidRuntime(323): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-22 10:09:40.310: E/AndroidRuntime(323): ... 11 more 

Ok pour le rendre plus facile est le code complet ici:

package com.martijngijselaar.rooster; 

import android.app.Activity; 
import android.net.ConnectivityManager; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.Window; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class SaxionRoosterActivity extends Activity { 
    private static final int MENU1 = Menu.FIRST; 
    private static final int MENU2 = Menu.FIRST + 1; 
    private static final int MENU3 = Menu.FIRST + 2; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.main); 
     WebView myWebView = (WebView) findViewById(R.id.webview); 
     myWebView.setWebViewClient(new WebViewClient()); 

     // Checken of er een connectie is, zo niet dan de chache laden, zo wel dan gewoon het netwerk laden!! 
     ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE); 
     String weblink = "http://google.com/"; 
     if(cm.getActiveNetworkInfo().isConnected()){ 
      myWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
      myWebView.loadUrl(weblink); 
     } else { 
      myWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
      myWebView.loadUrl(weblink); 
     } 

     // Zorgen dat je input kunt gebruiken in de webview 
     myWebView.requestFocus(View.FOCUS_DOWN); 
     myWebView.setOnTouchListener(new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
        case MotionEvent.ACTION_UP: 
         if (!v.hasFocus()) { 
          v.requestFocus(); 
         } 
         break; 
       } 
       return false; 
      } 

     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     menu.add(0, MENU1, 0, "Wijzig klas"); 
     menu.add(0, MENU2, 0, "Disclaimer"); 
     menu.add(0, MENU3, 0, "Sluiten"); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     WebView myWebView = (WebView) findViewById(R.id.webview); 
     switch (item.getItemId()) { 
     case MENU1: 
      myWebView.loadUrl("http://google.nl"); 
      return true; 
     case MENU2: 
      myWebView.loadUrl("http://google.nl"); 
      return true; 
     case MENU3: 
      finish(); 
      return true; 
     } 
     return false; 
    } 
} 
+0

Enregistre une erreur ici. – user370305

+0

et spécifiez quelle est la ligne 'SaxionRoosterActivity.java: 34' s'il vous plaît –

+0

Quel est le code à la ligne 34? – C0deAttack

Répondre

0

Votre chèque pour la connexion doit être peaufiné. Bien qu'il existe une propriété appelée isConnected, vous devez d'abord vérifier si getActiveNetworkInfo() renvoie null. Si elle renvoie null, il n'y a pas d'informations réseau actives - c'est ce que vous obtiendriez en mode avion. Ceci est la vérification que j'utilise pour la connectivité réseau

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null; 
} 
Questions connexes