当前位置: 首页 > 知识库问答 >
问题:

Android WebView关闭间隙视频广告后消失

丌官嘉福
2023-03-14
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.loadUrl(java.lang.String)' on a null object reference
    at com.bd.test.MainActivity.k(Unknown Source)
    at com.bd.test.MainActivity.a(Unknown Source)
    at android.support.design.widget.aa.a(Unknown Source)
    at android.support.v7.view.menu.i.a(Unknown Source)
    at android.support.v7.view.menu.m.b(Unknown Source)
    at android.support.v7.view.menu.i.a(Unknown Source)
    at android.support.design.internal.d.onClick(Unknown Source)
    at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:742)
    at android.os.Handler.dispatchMessage(Handler.java:97)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5457)
    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)
public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    protected WebView mWebView;
    protected InterstitialAd mInterstitialAd;

    protected int pageId = R.id.nav_home;

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

        //initToolbar();
        //initDrawer();
        //initNavigationView();

        initAdInterstitial();

        if (savedInstanceState != null) {
            return;
        }

        initWebView();
        navigate();
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        pageId = item.getItemId();
        navigate();
        return true;
    }

    protected void navigate() {

        // Close drawer if it is open.
        if(mDrawer.isDrawerOpen(GravityCompat.START)) {
            mDrawer.closeDrawer(GravityCompat.START);
        }

        if(pageId == R.id.nav_home) {
            mWebView.loadUrl(URL_INDEX);
        }
        else if(pageId == R.id.nav_level0) {
            mWebView.loadUrl(getLevelUrl(0));
        }
        else if(pageId == R.id.nav_level1) {
            mWebView.loadUrl(getLevelUrl(1));
        }
        else if(pageId == R.id.nav_level2) {
            mWebView.loadUrl(getLevelUrl(2));
        }
        else if(pageId == R.id.nav_level3) {
            mWebView.loadUrl(getLevelUrl(3));
        }
        else if(pageId == R.id.nav_history) {
            mWebView.loadUrl(URL_LAST_PLAYED);
        }
    }

    protected void initWebView() {

        mWebView = (WebView) findViewById(R.id.webview);

        // Enable Javascript
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setDatabaseEnabled(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
        webSettings.setDefaultTextEncodingName("utf-8");

        // Deprecated.
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            Context c = mWebView.getContext();
            webSettings.setDatabasePath(c.getFilesDir().getPath() + c.getPackageName() +
                    "/databases/");
        }

        mWebView.setWebViewClient(new WebViewClient() {

            /*
             * HERE IS WHERE THE INTERSTITIAL AD IS SHOWN.
             *
             * Shows the interstitial ad every n-th page load.
             */
            public void onPageFinished(WebView view, String url) {

                // After WebView page is loaded:

                // Update page load count.
                navigationCount = (navigationCount + 1) % adFrequency;

                // Show ad once every n-th page load.
                if(navigationCount == 0) {
                    showAd();
                }
            }
        });
    }

    protected void initAdInterstitial() {
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId(getString(R.string.interstitial_ad_unit_id));

        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                requestNewInterstitial();
            }
        });
        requestNewInterstitial();
    }

    protected void requestNewInterstitial() {
        AdRequest adRequest = new AdRequest.Builder().build();
        mInterstitialAd.loadAd(adRequest);
    }

    public void showAd() {
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        }
    }
}

共有1个答案

侯善
2023-03-14

我怀疑这是由于oncreate()中的这行

if (savedInstanceState != null) {
            return;
        }

当您返回您的活动时,您将拥有一个非null savedInstanceState,因此永远不会初始化您的WebView。

NB如果您使用行号来消除stacktraces或发布源代码的混淆,这将会有所帮助。

 类似资料:
  • 代码: 问题: 有时Admob加载带有视频的间隙广告,默认情况下该广告的音量设置为最大,有什么方法可以使其静音吗? 还有奖励视频广告,我找不到任何选项使广告静音,有人能帮忙吗?

  • 在我的应用程序中,我实现了间隙广告。 在adclose上,我的内容将加载。 我使用了以下代码来实现这个 此实现以前适用于间隙ads。 但是,从昨天起,我发现一些特定的广告没有关闭。 我认为问题是来自谷歌admob api,但我如何才能解决我的问题最终?

  • 调用说明show只是会触发广告展示,但是不一定会展示(受限于广告系统的策略等) BK.Advertisement.createVideoAd() 创建一个视频广告 手Q版本:7.6.5 返回值 BK.Advertisement.VideoAd 参数: 无 例子: var videoAd = BK.Advertisement.createVideoAd(); videoAd.onLoad(funct

  • 我正在为我的iOS应用程序使用RoboVM绑定来显示AdMob间隙。当我关闭间隙广告时,我将失去所有触摸控制。有没有办法检测广告正在关闭,以便我可以将触摸放回游戏?或者有没有更好的方法来实现间隙?下面是我的代码: //将触摸返回游戏 //UIApplication.getSharedApplication(). getKeyWindow(). setRootViewController(rootV

  • 嗨,伙计们,我的广告插页有问题。我在主活动中有一个横幅,但在另一个活动中,我想显示一个插页广告。横幅可以。。。我能看到这个!但间隙并没有显示。。。这是我的代码: } 我的UnitID是正确的:有一个logcat。 我在4.4.2中使用了模拟器,但我在物理设备上进行了尝试,但没有在中间位置使用广告,但在主活动中使用了小横幅! 我有GooglePlayService库...我的应用程序使用google

  • 我想在Google Play的“专为家庭设计”类别中为儿童制作应用程序。据此:https://support.google.com/googleplay/android-developer/answer/6184502有两条规则: 不得使用广告墙 插播广告不得在应用程序启动后立即显示 请您解释一下如何使间质广告不全屏(不是广告墙)? 广告墙和插页广告有什么区别? 我曾经用过这个填隙词:https: