Я создаю библиотеку 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);
}
}
}
}
}
Пожалуйста, помогите