2013-12-20 96 views
0

在我的遊戲中,我有一個構建Gameview並允許用戶玩各種關卡的類,直到他想要爲止。現在我想在關卡結束時顯示admob插頁式廣告。 這個類的GameView.java有一個方法來初始化從主活動中調用的遊戲。在非活動類中顯示admob插頁式廣告

admob插頁式代碼需要將活動實例作爲第一個參數。所以我通過主要活動的一個實例(使用this關鍵字),以GameView的遊戲方法,但我得到了調用間質性代碼以下異常:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

我在GameView.java代碼:

InterstitialAd interstitial = new InterstitialAd((MainActivity)mContext, 
     "admobunitid"); 
// Create ad request 

AdRequest adRequest = new AdRequest(); 
// Begin loading your interstitial 
interstitial.loadAd(adRequest); 
interstitial.setAdListener((MainActivity)mContext); 

GameView.java沒有擴展任何類,也沒有實現任何接口。對此有何幫助?

回答

3

你從工作者線程調用它。你需要在主線程中調用。例如,您可以使用處理程序。

activity.runOnUiThread(new Runnable() { 
     public void run() { 
     InterstitialAd interstitial = new InterstitialAd((MainActivity)mContext, 
     "admobunitid"); 
// Create ad request 

AdRequest adRequest = new AdRequest(); 
// Begin loading your interstitial 
interstitial.loadAd(adRequest); 
interstitial.setAdListener((MainActivity)mContext); 
     } 
    }); 
1
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

這當您嘗試顯示在主線程之外的Dialog通常發生。

嘗試換一個Runnable內部的代碼,然後用MainActivity.runOnUiThread();

0

是否有使用接口的任何禁忌執行呢?因爲在這種情況下使用它們會很合理。

0

這不是活動類,那麼你需要撥打runOnUiThread。就像它是android asynctask類doBackground方法那麼你需要這樣調用。

activity/context.runOnUiThread(new Runnable() { 
    public void run() { 
    /// your Ui view amd message 
InterstitialAd interstitial = new InterstitialAd((MainActivity)mContext, 
     "admobunitid"); 
// Create ad request 

AdRequest adRequest = new AdRequest(); 
// Begin loading your interstitial 
interstitial.loadAd(adRequest); 
interstitial.setAdListener((MainActivity)mContext); 
    } 
}); 

感謝

相關問題