0

In meiner App habe ich eine Aktivität erstellt, in der ich eine Webansicht verwende, um eine Webseite anzuzeigen. Ich habe eine Klasse namens NetworkReceiver erstellt, die BroadcastReceiver erweitert. Ich verwende diese Klasse, um den Benutzer zu benachrichtigen, wenn keine Internetverbindung besteht oder wenn eine mobile Netzwerk- oder WLAN-Verbindung erneut hergestellt wird. Aber das Problem, dass ich die App bekomme, stürzt für diesen Netzwerkempfänger ab, wenn die Netzwerkverbindung geändert wird. Das Überraschendste ist, dass dies nicht immer passiert. Manchmal ist die App komplett geschlossen und wenn ich versuche, das Internet zu verbinden, stürze ich auf App. Hier ist meine komplette Code für Webansicht Aktivität mit Netzwerk-Receiver-KlasseApp stürzt beim Versuch ab, die Netzwerkverbindung zu ändern Android

public class JobPage extends AppCompatActivity { 

public static WebView webView; 
private static final String URL = "https://....."; 


public static boolean refreshDisplay = true; 

// The BroadcastReceiver that tracks network connectivity changes. 
private NetworkReceiver receiver = new NetworkReceiver(); 

Constant constant; 
SharedPreferences app_preferences; 
int appTheme; 
int themeColor; 
int appColor; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.job_layout); 

    webView = (WebView) findViewById(R.id.webView); 
    webView.loadUrl(URL); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebViewClient(new WebViewClient()); 

    // Registers BroadcastReceiver to track network connection changes. 
    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
    receiver = new NetworkReceiver(); 
    this.registerReceiver(receiver, filter); 

} 

@Override 
protected void onStop() 
{ 
    unregisterReceiver(receiver); 
    super.onStop(); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    if (id == android.R.id.home) { 
     finish(); 
    } 
    return super.onOptionsItemSelected(item); 
} 

/** 
* Created by mnowshin on 16/08/2017. 
*/ 

public static class NetworkReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager conn = (ConnectivityManager) 
       context.getSystemService(CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = conn.getActiveNetworkInfo(); 

     if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) { 
      // If device has its Wi-Fi connection, sets refreshDisplay 
      // to true. This causes the display to be refreshed when the user 
      // returns to the app. 

      Toast.makeText(context, "Wi-fi is connected", Toast.LENGTH_SHORT).show(); 
      //JobPage.refreshDisplay = true; 
      webView.reload(); 

      // If the setting is ANY network and there is a network connection 
      // (which by process of elimination would be mobile), sets refreshDisplay to true. 
     } else if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { 
      Toast.makeText(context, "Mobile is connected", Toast.LENGTH_SHORT).show(); 
      //JobPage.refreshDisplay = true; 
      webView.reload(); 

      // Otherwise, the app can't download content--either because there is no network 
      // connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there 
      // is no Wi-Fi connection. 
      // Sets refreshDisplay to false. 
     } 
     else if (networkInfo != null && networkInfo.isConnectedOrConnecting()) { 
      Toast.makeText(context, "Data is connected", Toast.LENGTH_SHORT).show(); 
      //JobPage.refreshDisplay = true; 
      webView.reload(); 
     } 
     else { 
      refreshDisplay = false; 
      Toast.makeText(context, "Your internet connection is not availbale", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

}

09-21 15:03:57.500 12346-12346/demo.app.com.bluapp_client_and D/TimaKeyStoreProvider: TimaSignature is unavailable 
09-21 15:03:57.500 12346-12346/demo.app.com.bluapp_client_and D/ActivityThread: Added TimaKeyStore provider 
09-21 15:03:57.650 12346-12346/demo.app.com.bluapp_client_and D/AndroidRuntime: Shutting down VM 
09-21 15:03:57.650 12346-12346/demo.app.com.bluapp_client_and E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: demo.app.com.bluapp_client_and, PID: 12346 
                       java.lang.RuntimeException: Unable to start receiver demo.app.com.bluapp_client_and.activity.job.JobPage$NetworkReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.reload()' on a null object reference 
                        at android.app.ActivityThread.handleReceiver(ActivityThread.java:3641) 
                        at android.app.ActivityThread.access$2000(ActivityThread.java:221) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1876) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:158) 
                        at android.app.ActivityThread.main(ActivityThread.java:7225) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.reload()' on a null object reference 
                        at demo.app.com.bluapp_client_and.activity.job.JobPage$NetworkReceiver.onReceive(JobPage.java:174) 
                        at android.app.ActivityThread.handleReceiver(ActivityThread.java:3634) 
                        at android.app.ActivityThread.access$2000(ActivityThread.java:221)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1876)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:158)  
                        at android.app.ActivityThread.main(ActivityThread.java:7225)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="demo.app.com.bluapp_client_and"> 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="23" /> 

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



.... 

    <receiver android:name="demo.app.com.bluapp_client_and.activity.job.JobPage$NetworkReceiver"> 
     <intent-filter> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 
</application> 

+0

haben Sie die Berechtigung in der Manifestdatei hinzugefügt –

+0

@NileshRathod Ja – tamrezh21

+0

zeigen Sie Ihre Manifestdatei an –

Antwort

1

Ich benutze dies für die Internetverbindung

Erstellen Sie eine Klasse ...

public class InternetStatus { 
    private static InternetStatus instance = new InternetStatus(); 
    static Context context; 
    ConnectivityManager connectivityManager; 
    NetworkInfo wifiInfo, mobileInfo; 
    boolean connected = false; 

    public static InternetStatus getInstance(Context ctx) { 
     context = ctx.getApplicationContext(); 
     return instance; 
    } 

    public boolean isOnline() { 
     try { 
      connectivityManager = (ConnectivityManager) context 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 

      NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
      connected = networkInfo != null && networkInfo.isAvailable() && 
        networkInfo.isConnected(); 
      return connected; 


     } catch (Exception e) { 
      System.out.println("CheckConnectivity Exception: " + e.getMessage()); 
      Log.v("connectivity", e.toString()); 
     } 
     return connected; 
    } 
} 

Dann nenne ich kann es je in der App, wo.

if (InternetStatus.getInstance(getApplicationContext()).isOnline()) { 
     //User is online 
    } else { 
     //User is not online 
    } 
+0

Danke für Ihre Antwort, es funktioniert – tamrezh21

+0

genial. Glückliche Kodierung. – DroiDev

+0

warum fragst du mich das zu tun? – DroiDev

0

Es sagt Verursacht durch: java.lang.NullPointerException: Der Versuch, auf einer Null-Objekt Referenz

virtuelle Methode ‚Leerer android.webkit.WebView.reload()‘ aufrufen Mai diese Linie sein wird casusing problem.Check wenn die ID ist die richtige

webView = (WebView) findViewById(R.id.webView); 

prüfen Nullpointer vor dem Laden webview vor dem Betrieb zu tun

if(null!=webView){ 
//Do the operation  
} 
Verwandte Themen