尝试在空对象引用上调用虚拟方法'void android.webkit.WebView.setWebViewClient(android.webkit.WebViewClient)'

时间:2018-12-04 16:31:09

标签: android webview

我正在创建一个Android库,它将显示一个对话框,当用户单击按钮将其关闭时,将在应用程序内部打开一个Webview。

我只将lib实现到任何其他应用程序,然后调用dialog方法。

PS:(在对话框“方法”内部调用webview方法)。

我的问题与webview有关,当我单击“确定”关闭对话框时,出现以下异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.setWebViewClient(android.webkit.WebViewClient)' on a null object reference

我正在使用try / catch以免使应用程序崩溃,但是没有它,它确实会崩溃。 我不知道发生了什么,也无法在线找到任何解决方案。

这是Webview类:(在库中)

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class InngageWebViewActivity extends AppCompatActivity {

    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    }

    private WebView webview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.web_view);
        webview = findViewById(R.id.inn_webview);


    }

    public void web(String url) {


        Log.d(TAG, "Opening WebView component");


        Log.d(TAG, "Opening URL: " + url);
        try {

            webview.setWebViewClient(new MyWebViewClient());
            webview.loadUrl(url);
            webview.requestFocus();
        } catch (Exception ex) {
            Log.d(TAG, "couldn't open the link due to :  " + ex);
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();

        if (webview != null) {
            webview.destroy();
        }
    }
}

这是webview xml文件:(在库中)

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/web_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="br.com.inngage.sdk.InngageWebViewActivity">
    <WebView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/inn_webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"

        android:scrollbars="none" />



</RelativeLayout>

这是显示对话框的方法:(也在库中)

public static void showDialogwithLink(String title,
                                      String body,
                                      final String notifyID,
                                      final String appToken,
                                      final String environment,
                                      final String url,
                                      final Context appContext) {

String endpoint = INNGAGE_DEV_ENV.equals(environment) ? API_DEV_ENDPOINT : API_PROD_ENDPOINT;

if ("".equals(title)) {

    title = getApplicationName(appContext);
}

callbackNotification(notifyID, appToken, endpoint + PATH_NOTIFICATION_CALLBACK);

AlertDialog.Builder builder = new AlertDialog.Builder(appContext);
builder.setTitle(title);
builder.setMessage(body);
builder.setPositiveButton("Ok",
        new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {
                InngageWebViewActivity wv = new InngageWebViewActivity();
                wv.web(url);
                Log.d(TAG, "Button OK pressed by the user");

            }
        });

这是我的MainActivity :(我的应用程序)

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

import br.com.inngage.sdk.GrantPermission;
import br.com.inngage.sdk.InngageIntentService;
import br.com.inngage.sdk.InngagePermissionUtil;
import br.com.inngage.sdk.InngageServiceUtils;
import br.com.inngage.sdk.InngageUtils;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "TAG" ;
    InngageServiceUtils serviceUtils = new InngageServiceUtils(MainActivity.this);
    public InngagePermissionUtil.PermissionRequestObject mBothPermissionRequest;

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

        Toast.makeText(this,"App Started",Toast.LENGTH_LONG).show();

        handleNotification();

    }



    private void handleNotification() {

        String notifyID = "", title = "", body = "", url = "";

        Bundle bundle = getIntent().getExtras();

        if (getIntent().hasExtra("EXTRA_NOTIFICATION_ID")) {

            notifyID = bundle.getString("EXTRA_NOTIFICATION_ID");
        }
        if (getIntent().hasExtra("EXTRA_TITLE")) {

            title = bundle.getString("EXTRA_TITLE");
        }
        if (getIntent().hasExtra("EXTRA_BODY")) {

            body = bundle.getString("EXTRA_BODY");
        }

        if (getIntent().hasExtra("EXTRA_URL")) {

            url = bundle.getString("EXTRA_URL");
        }

        if (url.isEmpty()) {
            if (!"".equals(notifyID) || !"".equals(title) || !"".equals(body)) {
                Log.d(TAG, "no link: " + url);
                InngageUtils.showDialog(
                        title,
                        body,
                        notifyID,
                        InngageConstants.inngageAppToken,
                        InngageConstants.inngageEnvironment,
                        this);
            }

        } else if (!"".equals(notifyID) || !"".equals(title) || !"".equals(body)) {
            Log.d(TAG, "Link: " + url);
            InngageUtils.showDialogwithLink(
                    title,
                    body,
                    notifyID,
                    InngageConstants.inngageAppToken,
                    InngageConstants.inngageEnvironment,
                    url,
                    this);
        }

    }

        }

    }
}

请帮助

0 个答案:

没有答案