2016-06-09 106 views
-1

我已經開始學習如何在Android Studio中編碼遇到問題。我已經搜索了大約9個小時,並嘗試了我對android工作室有限理解所能想到的一切。Android admob error setContentView

詳細信息:this學習教程後,我試圖整合橫幅廣告只是爲了學習如何做到這一點。我使用this教程來製作廣告。我認爲這個問題是因爲我有setContentView函數使用我自定義的GamePanel類,因爲如果我使用R.layout.activity_game(主佈局)它不會給我一個錯誤,但我找不到解決此問題的方法。 我試圖在玩家死亡時開始另一項活動,但這似乎不起作用。之後,我嘗試從GamePanel更新方法中更改contentView,但所做的只是停止遊戲並使其不響應輸入。

錯誤:

06-09 12:48:22.584 6187-6187/coldwarcore.aliens E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: coldwarcore.aliens, PID: 6187 
                   java.lang.RuntimeException: Unable to start activity ComponentInfo{coldwarcore.aliens/coldwarcore.aliens.Game}: java.lang.NullPointerException 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2429) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) 
                    at android.app.ActivityThread.access$800(ActivityThread.java:166) 
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 
                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                    at android.os.Looper.loop(Looper.java:136) 
                    at android.app.ActivityThread.main(ActivityThread.java:5584) 
                    at java.lang.reflect.Method.invokeNative(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:515) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
                    at dalvik.system.NativeStart.main(Native Method) 
                   Caused by: java.lang.NullPointerException 
                    at coldwarcore.aliens.Game.onCreate(Game.java:25) 
                    at android.app.Activity.performCreate(Activity.java:5447) 
                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2393) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493)  
                    at android.app.ActivityThread.access$800(ActivityThread.java:166)  
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)  
                    at android.os.Handler.dispatchMessage(Handler.java:102)  
                    at android.os.Looper.loop(Looper.java:136)  
                    at android.app.ActivityThread.main(ActivityThread.java:5584)  
                    at java.lang.reflect.Method.invokeNative(Native Method)  
                    at java.lang.reflect.Method.invoke(Method.java:515)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)  
                    at dalvik.system.NativeStart.main(Native Method)  

源代碼: 主要活動:

public class Game extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(new GamePanel(this)); 
    //if I put the ad code here, I get the error mentioned above 
} 

activity_game.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:ads="http://schemas.android.com/apk/res-auto" 
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="coldwarcore.aliens.Game"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!" /> 
<com.google.android.gms.ads.AdView 
    android:id="@+id/adView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_alignParentBottom="true" 
    ads:adSize="BANNER" 
    ads:adUnitId="@string/banner_ad_unit_id"> 
</com.google.android.gms.ads.AdView> 
</RelativeLayout> 

的GamePanel:編輯: 我用這段代碼在GamePanel中創建一個廣告。

mInterstitialAd = new InterstitialAd(getContext()); 
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712"); 
AdRequest adRequest = new AdRequest.Builder() 
.addTestDevice(((Game)getContext()).getHASHID()) //gets device HASH ID 
.build(); 
mInterstitialAd.loadAd(adRequest); 

然後使用: 如果(mInterstitialAd.isLoaded()){ 的System.out.println( 「廣告顯示」); mInterstitialAd.show(); } else System.out.println(「ad not loaded」); 來檢查它是否被加載,但是if語句沒有寫入任何內容,所以isLoaded()函數一定有問題。當這不起作用時,我嘗試在if之外強制使用show()方法,因爲我知道廣告必須在顯示廣告時加載,但這也不起作用。 有沒有其他方法可以使這項工作?還是有什麼辦法從GamePanel切換到另一個活動,然後再回來?

+0

在#onCreate()中發佈代碼導​​致錯誤。錯誤是由第25行引起的,所以發帖 –

+0

這裏是: AdView mAdView =(AdView)findViewById(R.id.adView); // line 25 AdRequest adRequest = new AdRequest.Builder()。build(); //第26行 mAdView。loadAd(AdRequest中); //第27行 – Cristiannic

回答

1

由於在Game類中不使用activity_game.xml,因此拋出空指針異常。

而不是setContentView(new GamePanel(this));

您應該使用setContentView(R.layout.activity_game);

不過,既然你需要GamePanel顯示你的遊戲的看法。您應該以編程方式或通過xml添加adview

+0

我嘗試使用以下方法初始化GamePanel函數中的廣告: mInterstitialAd = new InterstitialAd(getContext()); mInterstitialAd.setAdUnitId(「ca-app-pub-3940256099942544/1033173712」); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(((Game)getContext())。getHASHID()) .build(); mInterstitialAd.loadAd(adRequest); 然後使用isLoaded()函數檢查它是否被加載,然後使用show()來顯示它,但isLoaded()似乎沒有做任何事情,實際上用我的代碼混淆了。即使強制show()也不起作用。 – Cristiannic

+0

我也嘗試使用Intent切換活動,但是我找不到不使用XML文件的方法。 – Cristiannic

+0

請更新您的原始問題 –