【问题标题】:Android AdMob Phonegap Not WorkingAndroid AdMob Phonegap 不工作
【发布时间】:2012-08-08 14:08:03
【问题描述】:

谁能帮助我,我从前两天开始尝试在 android 中实现 admob,但收到以下错误消息 -

08-08 19:05:33.362: W/webcore(3228): 在 第一个布局 08-08 19:10:51.632: W/dalvikvm(3328): VFY: 无法 解析直接方法3204:Landroid/webkit/WebView;。 (Landroid/content/Context;Landroid/util/AttributeSet;IZ)V 08-08 19:10:51.662:I/webclipboard(3328):clipservice: android.sec.clipboard.ClipboardExManager@40534500 08-08 19:10:52.142: I/CordovaLog(3328):将日志级别更改为 DEBUG(3) 08-08 19:10:52.142: I/CordovaLog(3328):找到 useBrowserHistory=false 的首选项 08-08 19:10:52.142:D/CordovaLog(3328):发现偏好 useBrowserHistory=false 08-08 19:10:52.152: E/dalvikvm(3328): 可以 找不到类 'android.webkit.WebResourceResponse',引用自 方法 org.apache.cordova.CordovaWebViewClient.generateWebResourceResponse 08-08 19:10:52.152: W/dalvikvm(3328): VFY: 无法解决 新实例 467 (Landroid/webkit/WebResourceResponse;) 在 Lorg/apache/cordova/CordovaWebViewClient; 08-08 19:10:52.152: W/dalvikvm(3328):VFY:无法找到签名中引用的类 (Landroid/webkit/WebResourceResponse;) 08-08 19:10:52.182: W/dalvikvm(3328):VFY:无法找到签名中引用的类 (Landroid/webkit/WebResourceResponse;) 08-08 19:10:52.182: W/dalvikvm(3328):VFY:无法找到签名中引用的类 (Landroid/webkit/WebResourceResponse;) 08-08 19:10:52.182: W/dalvikvm(3328):VFY:无法解析虚拟方法 3225: Landroid/webkit/WebViewClient;.shouldInterceptRequest (Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse; 08-08 19:10:52.182:D/DroidGap(3328):DroidGap.init()08-08 19:10:52.192: D/CordovaWebView(3328): >>> loadUrl(file:///android_asset/www/index.html) 08-08 19:10:52.192: D/PluginManager(3328): init() 08-08 19:10:52.212: D/CordovaWebView(3328): >>> loadUrlNow() 08-08 19:10:52.272: E/Ads(3328):找不到 com.google.ads.AdActivity,请制作 确保它已在 AndroidManifest.xml 中注册。 08-08 19:10:52.272: E/Ads(3328):您必须在 AndroidManifest.xml 中声明 AdActivity 使用 configChanges。 08-08 19:10:52.282:我/网络剪贴板(3328): 剪辑服务:android.sec.clipboard.ClipboardExManager@405512e0 08-08 19:10:52.332:I/webclipboard(3328):clipservice: android.sec.clipboard.ClipboardExManager@405512e0 08-08 19:10:52.902: D/AndroidRuntime(3328): 关闭 VM 08-08 19:10:52.902: W/dalvikvm(3328):threadid=1:线程以未捕获的异常退出 (组=0x40018578)08-08 19:10:52.902:E/AndroidRuntime(3328):致命 例外:主要 08-08 19:10:52.902:E/AndroidRuntime(3328): java.lang.RuntimeException:无法启动活动 ComponentInfo{com.ApplicationNexus.Albania/com.ApplicationNexus.Albania.Albania}: java.lang.NullPointerException 08-08 19:10:52.902: E/AndroidRuntime(3328):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 android.app.ActivityThread.access$1500(ActivityThread.java:117) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 android.os.Handler.dispatchMessage(Handler.java:99) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 android.os.Looper.loop(Looper.java:130) 08-08 19:10:52.902: E/AndroidRuntime(3328):在 android.app.ActivityThread.main(ActivityThread.java:3687) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 java.lang.reflect.Method.invokeNative(Native Method) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 java.lang.reflect.Method.invoke(Method.java:507) 08-08 19:10:52.902: E/AndroidRuntime(3328):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 dalvik.system.NativeStart.main(本机方法)08-08 19:10:52.902: E/AndroidRuntime(3328):原因:java.lang.NullPointerException 08-08 19:10:52.902:E/AndroidRuntime(3328):在 com.ApplicationNexus.Albania.Albania.onCreate(Albania.java:22) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 08-08 19:10:52.902:E/AndroidRuntime(3328):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 08-08 19:10:52.902: E/AndroidRuntime(3328): ... 11 更多

Following is the code of my main java file -


    import org.apache.cordova.*;
    import com.google.ads.*;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.support.v4.app.NavUtils;
    import android.widget.*;

    public class Albania extends DroidGap {
        private AdView adView;


        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            super.loadUrl("file:///android_asset/www/index.html");
            super.setIntegerProperty("loadUrlTimeoutValue", 70000);
            adView = new AdView(this, AdSize.BANNER, "a1502224a0ab1f8");
            LinearLayout layout = (LinearLayout) findViewById(R.id.adView);
            layout.addView(adView);
            adView.loadAd(new AdRequest()); }

这是我的 activity_appname.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello_world"
        tools:context=".Albania" />


    <com.google.ads.AdView android:id="@+id/adView"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         ads:adSize="BANNER"
                         ads:testDevices="TEST_EMULATOR, S567041ba118d"
                         ads:loadAdOnCreate="true"/>


</RelativeLayout>

这是我的 android manifest.xml 文件

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".Albania"
            android:label="@string/title_activity_albania" 
            android:configChanges="orientation|keyboardHidden|orientation|keyboard|screenSize|uiMode|screenLayout|locale"
            android:hardwareAccelerated="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> 
    <activity
        android:name="com.google.ads.AdActivity"
 android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />         
    </application>
</manifest>

【问题讨论】:

    标签: android android-layout cordova admob


    【解决方案1】:

    来自this SO question,确保您的清单 xml 中有:

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/>
    

    【讨论】:

      【解决方案2】:

      您无需在 XML 和代码中指定 AdView。只需将 ads:adUnitId="a1502224a0ab1f8" 放入 XML 中的 com.google.ads.AdView 即可,您可以删除以下 Adview 代码:

      adView = new AdView(this, AdSize.BANNER, "a1502224a0ab1f8");
      LinearLayout layout = (LinearLayout) findViewById(R.id.adView);
      layout.addView(adView);
      adView.loadAd(new AdRequest());
      

      编辑:

      Cordova 让您加载一个 url 并抽象出您设置视图的方式。您必须手动获取 Cordova WebView 的父级,并将 AdView 添加到 parentView。代码可能如下所示:

      adView = new AdView(this, AdSize.BANNER, "a1502224a0ab1f8");
      // Get the parent of the cordova webview. May be able to do something like: this.webView.getParent();
      parentView.addView(adView);
      adView.loadAd(new AdRequest());
      

      【讨论】:

      • 你的意思是说我必须在我的 xml 文件中执行此操作 - code code我不明白这个“删除 Adview 代码”。
      • 正确 - 我已更新我的答案,向您展示您将不再需要哪些 Java 代码。
      • 非常感谢您的回复,消除了所有错误。但是,测试广告没有显示在我的设备上。我已经从 Java 文件中删除了该代码并像这样修改了 xml 文件 - code code
      • AdMob SDK 查找的测试设备 ID 是经过哈希处理的 ID,因此您提供的 ID 无效。再次尝试在设备上运行您的应用,并在您发出广告请求后,检查 logcat 中是否有类似 To get test ads on device, use adRequest.addTestDevice("YOUR_32_HEX_DIGIT_HASHED_DEVICE_ID") 的消息。然后尝试将该设备 ID 放入您的 testDevices 列表中,它应该可以工作。
      • 我尝试了所有方法并将我的应用发布到 Google Play 商店,但它仍然没有显示 Admob 广告。这是 Google Play 网址 - play.google.com/store/apps/…
      猜你喜欢
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      相关资源
      最近更新 更多