Попытка вызвать виртуальный метод 'void android.webkit.WebView.setWebViewClient (android.webkit.WebViewClient)' для ссылки на пустой объект - PullRequest
0 голосов
/ 04 декабря 2018

Я создаю библиотеку Android, она показывает диалоговое окно, и когда пользователь нажимает на кнопку, чтобы закрыть ее, открывается веб-просмотр внутри приложения.

Я реализую библиотеку только для любого другого приложения и вызываюметод диалога.

PS: (метод веб-просмотра вызывается внутри метода диалога).

Моя проблема связана с веб-обзором, когда я нажимаю кнопку ОК, чтобы закрыть окноВ диалоговом окне я получаю следующее исключение:

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();
        }
    }
}

Это xml-файл webview: (в библиотеке)

  <?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");

            }
        });

Это моя основная деятельность: (Мое приложение)

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);
        }

    }

        }

    }
}

Пожалуйста, помогите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...