【问题标题】:Integrating Mopub ads into Cocos2dx 2.1将 Mopub 广告集成到 Cocos2dx 2.1
【发布时间】:2013-07-15 22:26:54
【问题描述】:

Mopub 集成说明建议在 xml 中使用 sn-p 创建广告视图,如下所示:

<com.mopub.mobileads.MoPubView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/adview"
android:layout_width="fill_parent"
android:layout_height="50dp"
/> 

然后说明建议在活动的 create 方法中创建广告视图,如下所示:

moPubView = (MoPubView)findViewById(R.id.adview);
moPubView.setAdUnitId("123412341234");
moPubView.loadAd();

很遗憾,moPubView 没有被创建,因为 Cocos2dx 2.1 不再使用 XML 进行布局。因此,由于空指针异常,应用程序在启动时崩溃。

在尝试创建广告视图之前,我尝试将 R.layout.main 传递给 setContentView。这确实成功地创建了广告视图,但是应用程序的其余部分不可见。

如何在不使用 XML 的情况下以编程方式创建类似于上述视图的视图?

我认为这解决了空指针异常问题,而无需调用setContentView。

【问题讨论】:

    标签: android nullpointerexception mopub


    【解决方案1】:
    private static BannerAdManager m_adDelegate = null;
    private static FrameLayout.LayoutParams m_bannerParam = null;
    private static FrameLayout m_appLayout = null;
    
    
    public static void initialize(Activity p_activity)
    {
        // create instance of delegate
        if( m_adDelegate == null )
        {
            m_adDelegate = new BannerAdManager();
        }
    
        m_activity = p_activity;
    
    
        //~~~setup mopub banner ad
        //~~~create mopub ad view
        m_mopubView = new MoPubView(m_activity);
    
        m_bannerParam = new FrameLayout.LayoutParams(   
                            FrameLayout.LayoutParams.WRAP_CONTENT,
                            FrameLayout.LayoutParams.WRAP_CONTENT
                        );
    
        m_mopubView.setAdUnitId(Config_Android._ID);
        m_mopubView.setBannerAdListener(m_adDelegate);
        m_mopubView.loadAd();
    
        //get current layout
        m_appLayout = (FrameLayout) m_activity.findViewById(android.R.id.content);
    
        // set default alignment
        m_bannerParam.gravity = Gravity.TOP | Gravity.CENTER;
    
        //add mopub view to layout
        m_appLayout.addView(m_mopubView, m_bannerParam);
    
    }
    
        public static void setBannerPositionTopWithPadding(float p_padding)
        {
            getActivity().runOnUiThread(new Runnable() 
            {
                public void run()
                {
                    activity = getActivity();
    
                    m_bannerParam.gravity  = Gravity.TOP | Gravity.CENTER;
                    m_bannerParam.width    = FrameLayout.LayoutParams.WRAP_CONTENT;
                    m_bannerParam.height   = FrameLayout.LayoutParams.WRAP_CONTENT;
    
                    m_bannerParam.topMargin = (int) p_padding;
    
                    m_appLayout.updateViewLayout(m_mopubView, m_bannerParam);
                    m_mopubView.refreshDrawableState();
    
                }
            });
        }
    

    【讨论】:

    • 对不起 :) 我是一个相对较新的 Android 新手,我对上面的代码一无所知..谁能解释一下 ChaCha 的意思?我正在尝试在一个小应用程序中做同样的事情。
    • 在最新的 MoPub SDK 中,没有比 BannerAdManager 更好的了!还是我错过了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多