0

I'm having trouble finishing my code. Everything works, except for one thing. I keep getting a null error which refers to the webViewClient which cannot be called. The app works fine, except when I turn off the WiFi and mobile network. It should show a dialog, but the app stops. I've had it working, but apparantly I've changed something for the bad. This is my error:

07-12 12:59:33.770 21023-21023/companyname.appname
E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: companyname.appname, PID: 21023
                                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{companyname.appname/companyname.appname.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.setWebViewClient(android.webkit.WebViewClient)' on a null object reference
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                                 at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                              Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.setWebViewClient(android.webkit.WebViewClient)' on a null object reference
                                                                                 at companyname.appname.MainActivity.onCreate(MainActivity.java:49)
                                                                                 at android.app.Activity.performCreate(Activity.java:6237)
                                                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                                 at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                 at android.os.Looper.loop(Looper.java:148) 
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                                 at java.lang.reflect.Method.invoke(Native Method) 
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

And this is a part of my code:

public class MainActivity extends AppCompatActivity {

WebView browser;
FloatingActionButton fab_plus,fab_settings,fab_share, fab_report;
Animation FabOpen,FabClose,FabRClockwise,FabRantiClockwise;
boolean isOpen = false;
boolean doubleBackToExitPressedOnce = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(!isConnected(MainActivity.this)) buildDialog(MainActivity.this).show();
    else {
        setContentView(R.layout.activity_main);
    }
    browser=(WebView) findViewById(R.id.webView);
    browser.setWebViewClient(new WebViewClient() {
                                 @Override
                                 public boolean shouldOverrideUrlLoading(WebView view,  String url) {
                                     view.loadUrl(url);
                                     return (true);
                                 }
                             });
    String url = "here's my url";
    WebView view = (WebView) this.findViewById(R.id.webView);
    view.getSettings().setJavaScriptEnabled(true);
    CookieManager.getInstance().setAcceptCookie(true);
    view.loadUrl(url);


//Over here there's a lot of code which I think is irrelevant for this problem. And then at the bottom there's my dialog and internet check:


public boolean isConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netinfo = cm.getActiveNetworkInfo();
    if (netinfo != null && netinfo.isConnectedOrConnecting()) {
        NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        NetworkInfo mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        if((mobile != null && mobile.isConnectedOrConnecting()) || (wifi != null && wifi.isConnectedOrConnecting())) return true;
    else return false;
    } else
    return false;
}
public AlertDialog.Builder buildDialog(Context c) {
    AlertDialog.Builder builder = new AlertDialog.Builder(c);
    builder.setTitle("No connection");
    builder.setMessage("Text");
    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });
    return builder;
}
}

And over here the part of the Webview in the activity_main XMl file:

    <WebView
    android:id="@+id/webView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true">

</WebView>

I think it is something simple which I'm not able to see. Do you guys have any idea? Many thanks in advance!

  • 2
    Possible duplicate of [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – litelite Jul 12 '17 at 13:24

3 Answers3

0

Get rid of this line:

browser.setWebViewClient(new WebViewClient());

First, you are calling it before you have assigned a value to browser. That is causing your crash.

Second, you are calling setWebViewClient() a second time later on, which makes this line pointless.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
0

Instead of

  browser.setWebViewClient(new WebViewClient());
  browser=(WebView) findViewById(R.id.webView);

write this

  browser=(WebView) findViewById(R.id.webView);    //first get reference
  browser.setWebViewClient(new WebViewClient());   //then call method
Giacomo Lai
  • 494
  • 3
  • 15
0

The problem is that you call this method before you instanciate you webview

browser.setWebViewClient(new WebViewClient());  <-- remove this line 
//Zorgt ervoor dat de browser de app niet verlaat
browser=(WebView) findViewById(R.id.webView);
browser.setWebViewClient(new WebViewClient() 

that should do the trick

yanivtwin
  • 617
  • 8
  • 32