2016-06-09 43 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

请更新您的原始问题 –