【问题标题】:Admob 6.4.1 - Error inflating class com.google.ads.AdViewAdmob 6.4.1 - 膨胀类 com.google.ads.AdView 时出错
【发布时间】:2013-07-28 16:06:58
【问题描述】:

将 admob 添加到我的 xml 时会导致致命错误,从而导致应用程序崩溃。

我在 /libs 中正确添加了 admob jar 并构建了路径。

xml看起来像这样

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="right" >

    <com.google.ads.AdView 
                        xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
                         android:id="@+id/adView"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         ads:adUnitId="#######"
                         ads:adSize="BANNER"
                         ads:testDevices="######"
                         ads:loadAdOnCreate="true"/> </RelativeLayout>

这里是logcat

07-29 00:39:59.113:E/Ads(8849):无法初始化 AdView:AdView 使用不是 Activity 的 Context 进行初始化。 07-29 00:39:59.113:E/Ads(8849):无法初始化 AdView:AdView 是 使用不是 Activity 的 Context 进行初始化。 07-29 00:39:59.113: W/dalvikvm(8849): threadid=1: 线程退出 未捕获的异常(组=0x40da9390)07-29 00:39:59.133: E/AndroidRuntime(8849): 致命异常: main 07-29 00:39:59.133: E/AndroidRuntime(8849): java.lang.RuntimeException: 无法启动 活动 组件信息{com.clickvote.app/com.clickvote.app.WebViewActivity}: android.view.InflateException:二进制 XML 文件第 7 行:错误 膨胀类 com.google.ads.AdView 07-29 00:39:59.133: E/AndroidRuntime(8849):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2355) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.app.ActivityThread.access$600(ActivityThread.java:151) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1335) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.os.Handler.dispatchMessage(Handler.java:99) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.os.Looper.loop(Looper.java:155) 07-29 00:39:59.133: E/AndroidRuntime(8849):在 android.app.ActivityThread.main(ActivityThread.java:5511) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 java.lang.reflect.Method.invokeNative(Native Method) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 java.lang.reflect.Method.invoke(Method.java:511) 07-29 00:39:59.133: E/AndroidRuntime(8849):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 dalvik.system.NativeStart.main(本机方法)07-29 00:39:59.133: E/AndroidRuntime(8849):引起:android.view.InflateException: 二进制 XML 文件第 7 行:膨胀类 com.google.ads.AdView 时出错 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.view.LayoutInflater.createView(LayoutInflater.java:613) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:489) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 com.android.internal.app.ActionBarImpl.setCustomView(ActionBarImpl.java:310) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 com.clickvote.app.WebViewActivity.onCreate(WebViewActivity.java:45) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.app.Activity.performCreate(Activity.java:5066) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1101) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311) 07-29 00:39:59.133: E/AndroidRuntime(8849): ... 11 更多 07-29 00:39:59.133: E/AndroidRuntime(8849): 由: java.lang.reflect.InvocationTargetException 07-29 00:39:59.133: E/AndroidRuntime(8849):在 java.lang.reflect.Constructor.constructNative(Native Method) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 java.lang.reflect.Constructor.newInstance(Constructor.java:417) 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 android.view.LayoutInflater.createView(LayoutInflater.java:587) 07-29 00:39:59.133: E/AndroidRuntime(8849): ... 20 更多 07-29 00:39:59.133: E/AndroidRuntime(8849):引起:java.lang.RuntimeException:可能 未初始化 AdView:AdView 已使用 Context 初始化 不是一个活动。 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 com.google.ads.AdView.a(SourceFile:402) 07-29 00:39:59.133: E/AndroidRuntime(8849):在 com.google.ads.AdView.(SourceFile:125) 07-29 00:39:59.133: E/AndroidRuntime(8849): ... 23 更多 07-29 00:39:59.133: E/AndroidRuntime(8849):引起:com.google.ads.internal.b:AdView 使用不是 Activity 的 Context 进行初始化。 07-29 00:39:59.133: E/AndroidRuntime(8849): 在 com.google.ads.AdView.a(SourceFile:389) 07-29 00:39:59.133: E/AndroidRuntime(8849): ... 24 更多

【问题讨论】:

  • 堆栈跟踪表明您正在尝试将AdView 设置为ActionBar 的自定义视图(基于ActionBarImpl.setCustomView(...) - 是这样吗?如果是这样,我想' ActionBar 内部用于膨胀视图的主题上下文'不一定是Activity。您可以尝试自己在Activity 中膨胀视图并调用setCustomView(View view)(而不是setCustomView(int resId),这就是您的意思)可能现在正在使用)。
  • 感谢您的评论。我没有在我的活动中添加任何 admob 代码,因为我从布局 xml 运行代码。这就是我的活动开始的方式` public class WebViewActivity extends DroidGap { public static String LOG_TAG = "name";私人对话框 mLoadingDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setCustomView(R.layout.ab); getActionBar().setDisplayShowCustomEnabled(true); getActionBar().setDisplayShowHomeEnabled(false);`

标签: java android eclipse sdk admob


【解决方案1】:

好的,根据您的评论,我将发布较早的建议作为带有一些示例代码的答案,因为正如您所指出的,您对 Android 还是很陌生。

您当前的代码:

public class WebViewActivity extends DroidGap {
    public static String LOG_TAG = "name";
    private Dialog mLoadingDialog;

    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getActionBar().setCustomView(R.layout.ab); // <-- !!
        getActionBar().setDisplayShowCustomEnabled(true);
        getActionBar().setDisplayShowHomeEnabled(false);
    }
}

基本上你应该尝试重写上面指出的行。与其将自定义视图膨胀委托给ActionBar,不如自己膨胀以确保使用Activity 上下文。像这样:

public class WebViewActivity extends DroidGap {
    public static String LOG_TAG = "name";
    private Dialog mLoadingDialog;

    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View customActionBarView = getLayoutInflater().inflate(R.layout.ab, null, false);
        getActionBar().setCustomView(customActionBarView);
        getActionBar().setDisplayShowCustomEnabled(true);
        getActionBar().setDisplayShowHomeEnabled(false);
    }
}

这应该(可能)摆脱您当前看到的异常。我没有验证或尝试运行上面的 sn-p,所以请注意任何拼写错误。如果您在此之后仍然遇到同样的问题,请轻推我,我会仔细查看。

【讨论】:

  • 感谢您的帮助。我尝试了您提供的代码 - 但仍然遇到同样的问题。让我困惑的是,admob 是通过 xml 清除的,并且在 admob 的活动中基本上没有使用任何代码。
  • 你确定你删除了说setCustomView(R.layout.ab)的电话吗?也许值得用一些相关代码修改您的问题。关于您的困惑:AdView 是一个相当独立的组件,这就是为什么作为开发人员,您基本上不必针对它编写任何代码。
  • 是的,我设置了 .setCustomView(customActionBarView);相反,同样的问题。感谢您提供的信息,这就是我的想法,让我感到困惑,为什么简单的 xml 集成会导致错误。
【解决方案2】:

尝试阅读您的错误:

 AdView was initialized with a Context that wasn't an Activity

【讨论】:

  • 我做到了。有什么帮助吗?我真的很擅长这样做
  • 这被认为是一个答案,因为这意味着他传递给 AdView 的 Context 不是来自 Activity。这意味着作者需要重新访问他的代码以确保它来自 Activity。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2017-02-28
相关资源
最近更新 更多