当我尝试从活动类调用函数时崩溃

时间:2014-01-19 12:43:42

标签: java android illegalstateexception

好的,所以我遇到了一个非常奇怪的情况。我正在尝试在我的应用中设置广告,但这还没有成功,我不完全确定原因。我一直遇到这个错误。我在另一个有点断开连接的类中从我的活动中调用一个函数,但我确实有一个参考。我收到此日志错误。请注意,我已经对我的广告进行了所有实际调用,我实际上是在调用一个空函数。

01-19 07:32:54.440: E/AndroidRuntime(13651): FATAL EXCEPTION: Thread-49013
01-19 07:32:54.440: E/AndroidRuntime(13651): java.lang.IllegalStateException: setAdListener must be called on the main UI thread.
01-19 07:32:54.440: E/AndroidRuntime(13651):    at azy.b(SourceFile:174)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at xq.a(SourceFile:511)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at ya.onTransact(SourceFile:105)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at android.os.Binder.transact(Binder.java:326)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at com.google.android.gms.internal.ac$a$a.a(Unknown Source)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at com.google.android.gms.ads.InterstitialAd.c(Unknown Source)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at com.google.android.gms.ads.InterstitialAd.loadAd(Unknown Source)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at net.timepieceent.Pong.DroidPongActivity.loadAndDisplayAd(DroidPongActivity.java:65)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at net.timepieceent.Pong.MainMenu.stateChange(MainMenu.java:363)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at net.timepieceent.Pong.MainMenu.buttonCheck(MainMenu.java:219)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at net.timepieceent.Pong.MainMenu.update(MainMenu.java:151)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at com.badlogic.framework.AndroidFastRenderView.run(AndroidFastRenderView.java:48)
01-19 07:32:54.440: E/AndroidRuntime(13651):    at java.lang.Thread.run(Thread.java:856)

有没有人知道我为什么会收到这个错误?我觉得这实际上是我遇到的问题,而不是广告。请帮忙。非常感谢你。

编辑:我甚至已经把谷歌播放服务库拿出来了,我仍然收到这个错误。我不明白为什么它会说setAdListener,因为我根本就没有调用它。

编辑:我的程序毫无疑问是搞笑的。我已经删除了整个DroidPongActivity,它应该使应用程序不运行,但它仍然做同样的事情。这很奇怪。

编辑:谢谢大家。在修复项目后,我应用了Runonuithread解决方案。 Eclipse没有安装新的代码更改,所以我将项目复制到另一个文件夹,在eclipse中将其删除并重新导入。之后一切都很花哨。

我会结束讨论,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

无论你做什么,错误都是说应该在UI线程上完成。

runOnUiThread(new Runnable() {
  @Override
  public void run() {

      // your code here

  }
});

错误是您活动的第65行。将该(以及可能类似的代码)移动到run()方法中。

答案 1 :(得分:0)

显然,你在另一个线程中调用主UI方法,即使有引用,也不能直接从另一个线程调用UI相关方法。

您可以在下面查看如何与UI线程进行通信的链接 https://developer.android.com/training/multiple-threads/communicate-ui.html

答案 2 :(得分:0)

从您的logcat错误看来,您似乎正在尝试从UI线程做一些事情,这必须在UI线程上完成。这样做,

Runnable r = new Runnable () {

    @Override
    public void run() {
       // Do Here whatever you are trying to do
    }
}

runOnUiThread(r);

希望这能解决您的问题,如果没有,请告诉我。