AdMob的横幅广告声明,在安卓类捐赠的错误 [英] admob banner ad declaration in class giving errors in android

查看:249
本文介绍了AdMob的横幅广告声明,在安卓类捐赠的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Andr​​oid游戏,我宣布AdMob的横幅广告中的类,而不是布局。我用下面的code。在 onSetContentView

 保护无效onSetContentView(){
        最后的FrameLayout的FrameLayout =新的FrameLayout(本);
        最后FrameLayout.LayoutParams frameLayoutLayoutParams =
                新FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
                                             FrameLayout.LayoutParams.FILL_PARENT);

        最终AD浏览报AD浏览报=新的AD浏览报(这一点,AdSize.BANNER,CA-APP-酒馆7036151237分之7554016237953661);

        adView.refreshDrawableState();
        adView.setVisibility(AdView.VISIBLE);
        最后FrameLayout.LayoutParams adViewLayoutParams =
                新FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
                                             FrameLayout.LayoutParams.WRAP_CONTENT,
                                             Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);


        AdRequest adRequest =新AdRequest();
        adView.loadAd(adRequest);

        this.mRenderSurfaceView =新RenderSurfaceView(本);
        mRenderSurfaceView.setRenderer(mEngine);

        最后android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
                新FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());

        frameLayout.addView(this.mRenderSurfaceView,surfaceViewLayoutParams);
        frameLayout.addView(AD浏览报,adViewLayoutParams);

        this.setContentView(的FrameLayout,frameLayoutLayoutParams);

    }
 

在我的清单文件我用了:

 <机器人:名称=com.google.ads.AdActivity
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
 

错误日志返回以下错误:

 致命异常:主要
java.lang.NoSuchMethodError:android.widget.FrameLayout $的LayoutParams< INIT>
在com.nguyenxuan.fruitmatching.Menu.onSetContentView(Menu.java:132)
在org.anddev.andengine.ui.activity.BaseGameActivity.onCreate(BaseGameActivity.java:62)
在android.app.Activity.performCreate(Activity.java:5122)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
在android.app.ActivityThread.access $ 600(ActivityThread.java:156)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1340)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:153)
在android.app.ActivityThread.main(ActivityThread.java:5297)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:833)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
在dalvik.system.NativeStart.main(本机方法)
 

解决方案

我想你正在使用的19构建目标你的code编译但会崩溃的设备/仿真器在Android&LT运行; API级别19,因为

FrameLayout.LayoutParams(FrameLayout.LayoutParams源)构造函数可从API 19.你应该转换为旧目标API 1 的FrameLayout .LayoutParams(ViewGroup.MarginLayoutParams源)。修改您的code如下:

 最后FrameLayout.LayoutParams frameLayoutLayoutParams =
               ((ViewGroup.MarginLayoutParams)(新FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
                                             FrameLayout.LayoutParams.FILL_PARENT)));

 最后FrameLayout.LayoutParams adViewLayoutParams =
               ((ViewGroup.MarginLayoutParams)(新FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
                                             FrameLayout.LayoutParams.WRAP_CONTENT,
                                             Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM)));
 

In My android game I'm declared admob banner ad in class instead of layout. I had used the following code in onSetContentView:

 protected void onSetContentView() {
        final FrameLayout frameLayout = new FrameLayout(this);
        final FrameLayout.LayoutParams frameLayoutLayoutParams =
                new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
                                             FrameLayout.LayoutParams.FILL_PARENT);

        final AdView adView = new AdView(this, AdSize.BANNER, "ca-app-pub-7554016237953661/7036151237");

        adView.refreshDrawableState();
        adView.setVisibility(AdView.VISIBLE);
        final FrameLayout.LayoutParams adViewLayoutParams =
                new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
                                             FrameLayout.LayoutParams.WRAP_CONTENT,
                                             Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);


        AdRequest adRequest = new AdRequest();
        adView.loadAd(adRequest);

        this.mRenderSurfaceView = new RenderSurfaceView(this);
        mRenderSurfaceView.setRenderer(mEngine);

        final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
                new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());

        frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);
        frameLayout.addView(adView, adViewLayoutParams);

        this.setContentView(frameLayout, frameLayoutLayoutParams);

    }

And in my manifest file i had used:

<android:name="com.google.ads.AdActivity"            
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />         

Error log returns the following error:

FATAL EXCEPTION: main
java.lang.NoSuchMethodError: android.widget.FrameLayout$LayoutParams.<init>
at com.nguyenxuan.fruitmatching.Menu.onSetContentView(Menu.java:132)
at org.anddev.andengine.ui.activity.BaseGameActivity.onCreate(BaseGameActivity.java:62)
at android.app.Activity.performCreate(Activity.java:5122)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
at android.app.ActivityThread.access$600(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

解决方案

I suppose you're using a build target of 19. Your code will compile but will crash on devices/emulators running on android < Api Level 19 because,

the FrameLayout.LayoutParams(FrameLayout.LayoutParams source) constructor is available from API 19. You should cast to the older target API 1 FrameLayout.LayoutParams (ViewGroup.MarginLayoutParams source). Modify your code as follows:

 final FrameLayout.LayoutParams frameLayoutLayoutParams =
               ((ViewGroup.MarginLayoutParams) (new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
                                             FrameLayout.LayoutParams.FILL_PARENT)));

 final FrameLayout.LayoutParams adViewLayoutParams =
               ((ViewGroup.MarginLayoutParams) (new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
                                             FrameLayout.LayoutParams.WRAP_CONTENT,
                                             Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM)));

这篇关于AdMob的横幅广告声明,在安卓类捐赠的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆