0

我正在为我的应用程序实施 adMob 广告,但我遇到了一个小问题。当我将 AdMob 广告添加到我的应用程序时,它们会自动定位在布局的顶部,一切正常。但是当我尝试将广告向下移动到相对布局的底部时,应用程序崩溃了。

日志猫:

08-14 13:57:53.126: E/AndroidRuntime(4141): FATAL EXCEPTION: main
08-14 13:57:53.126: E/AndroidRuntime(4141): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.whizzappseasyvoicenotepad/com.whizzappseasyvoicenotepad.TabLayout}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.whizzappseasyvoicenotepad/com.whizzappseasyvoicenotepad.MainActivity}: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.Chronometer
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.os.Looper.loop(Looper.java:137)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at java.lang.reflect.Method.invokeNative(Native Method)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at java.lang.reflect.Method.invoke(Method.java:525)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at dalvik.system.NativeStart.main(Native Method)
08-14 13:57:53.126: E/AndroidRuntime(4141): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.whizzappseasyvoicenotepad/com.whizzappseasyvoicenotepad.MainActivity}: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.Chronometer
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2054)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:749)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.widget.TabHost.setCurrentTab(TabHost.java:413)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.widget.TabHost.addTab(TabHost.java:240)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at com.whizzappseasyvoicenotepad.TabLayout.onCreate(TabLayout.java:33)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.Activity.performCreate(Activity.java:5133)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-14 13:57:53.126: E/AndroidRuntime(4141):     ... 11 more
08-14 13:57:53.126: E/AndroidRuntime(4141): Caused by: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.Chronometer
08-14 13:57:53.126: E/AndroidRuntime(4141):     at com.whizzappseasyvoicenotepad.MainActivity.onCreate(MainActivity.java:71)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.Activity.performCreate(Activity.java:5133)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-14 13:57:53.126: E/AndroidRuntime(4141):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-14 13:57:53.126: E/AndroidRuntime(4141):     ... 21 more

我对其进行了测试,每次我实施广告时,它们都会起作用,直到我将它们移到相关布局的底部。可能是什么问题呢?我可以从 logcat 中看到 ToggleButton 存在问题,所以我什至尝试在布局周围移动切换按钮,但它没有解决任何问题。

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" xmlns:app="http://schemas.android.com/apk/lib/com.google.ads">

<Chronometer
    android:id="@+id/timer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/adView"
    android:layout_centerHorizontal="true"
    android:text="Chronometer" />

<ImageButton
    android:id="@+id/recButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/timer"
    android:layout_centerHorizontal="true"
    android:background="@null"
    android:onClick="recordBtnClick"
    android:src="@drawable/record_btn" />

<ToggleButton
    android:id="@+id/tBtn1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:textOff="Touch to record"
    android:textOn="Touch to record" />

<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"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    ads:loadAdOnCreate="true"
    ads:testDevices="TEST_EMULATOR, 3F40A7AF85746C87"
    app:adSize="BANNER"
    app:adUnitId="a1520b668ee78d8" >
</com.google.ads.AdView>

4

2 回答 2

0

您在代码的第 71 行有一个类转换异常。如果代码的第 71 行是

  chTimer = (Chronometer)findViewById(R.id.timer);

正如您在对 Arshad 的回复中指出的那样,您有一个混乱的构建环境,其中生成的资源 ID 不是您认为的那样。

执行干净的构建,以便重新生成资源 ID。

于 2013-08-14T21:44:20.217 回答
0

请检查第 71 行的 MainActivity.java 文件。您将 Chronometer id 传递到 ImageButton。这就是为什么你会得到一个 Class cast 异常

于 2013-08-14T12:41:43.850 回答