2017-04-22 11 views
-1

私のアプリにAdMobバナー広告コードを追加しようとしています。それをやろうとすると、adView.loadAd(adRequest)でNull Pointer Exceptionエラーが発生します。AdmobコードがAndroidスタジオでヌルポインタ例外を作成する

これは私のレイアウトxmlです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:ads="http://schemas.android.com/apk/res-auto" 

android:layout_width="fill_parent" 
android:layout_height="fill_parent" 

tools:context=".GoldMinerActivity"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:text="@string/hello_world" /> 

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

これが私のメインactivity.java

public CCGLSurfaceView mGLSurfaceView; 

@Override 

protected void onCreate(Bundle savedInstanceState) { 



    /*super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gold_miner);*/ 

    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    mGLSurfaceView = new CCGLSurfaceView(this); 
    setContentView(mGLSurfaceView); 

    MobileAds.initialize(getApplicationContext(), "ca-app-pub-xxxxxxxxxxxxxx~xxxxxxxxxx"); 
    AdView adView = (AdView) findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    adView.loadAd(adRequest); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_gold_miner, menu); 
    return true; 
} 

@Override 
protected void onStart() { 
    super.onStart(); 

    CCDirector.sharedDirector().attachInView(mGLSurfaceView); 
    getScaledCoordinate(); 

    CCScene scene = CCScene.node(); 
    scene.addChild(new LogoScene(), -1); 
    CCDirector.sharedDirector().runWithScene(scene); 


} 

である私はこの問題を考え出したが、それを解決することができませんでした。私はあなたにこの問題に関するGurusの専門知識が必要です。

私は私のメインのxmlファイルを実行しません

setContentView(mGLSurfaceView); 

私のコードを使用していますが、私はエラーを取得しているため。私は

を使用している場合、私はのonCreateでmGLSurfaceViewを作成していないので

は、しかし、その後、私はここに

protected void onStart() { 
    super.onStart(); 

    CCDirector.sharedDirector().attachInView(mGLSurfaceView); 
    getScaledCoordinate(); 

にNULLポインタ例外エラーが表示されます。誰かが私にこの問題を解決する方法を助けることができますか?

+0

CCGLSurfaceViewは.javaファイルです。レイアウトにどのように追加しますか?私はそれについてとても混乱しています。 –

答えて

0

原因:

/*super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_gold_miner);*/ 

super.onCreate(savedInstanceState); 

requestWindowFeature(Window.FEATURE_NO_TITLE); 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 
mGLSurfaceView = new CCGLSurfaceView(this); 
setContentView(mGLSurfaceView);<---- THIS LINE 

MobileAds.initialize(getApplicationContext(), "ca-app-pub-xxxxxxxxxxxxxx~xxxxxxxxxx"); 
AdView adView = (AdView) findViewById(R.id.adView); 
AdRequest adRequest = new AdRequest.Builder().build(); 
adView.loadAd(adRequest); 

あなたはadviewが含まれていないレイアウトにコンテンツビューを設定しています。同じ時間に広告を表示し、CCGLSurfaceViewを表示する場合は、CCGLSurfaceViewをカスタムビューとしてactivity_gold_minerに追加します。基本的には:

  • あなたはnullを返すことにつながるコンテンツビュー
  • にないビューを見つけます。 IDが存在するので、それはあなたのアプリケーションをクラッシュしませんが、それはあなたがあなたがそれを解決するために

クラッシュ意味ヌルビュー

  • への広告リクエストをロードするために進んで
  • ヌル与え、セットそのIDを持つレイアウトにコンテンツビューを追加すると、レイアウトにカスタムビューとしてサーフェイスビューを追加する必要があります。あなたは、あなただけでインスタンスが必要な場合:あなたはsurfaceviewを追加するために、あなたのレイアウトを変更するとき

    mGLSurfaceView = (CCGLSurfaceView) findViewById(R.id.theIdHere); 
    

    --EDIT--

    は、Javaコードは次のようになります。

    setContentView(R.layout.yourLayout); 
    mGLSurfaceView = (CCGLSurfaceView) findViewById(R.id.surfaceView); 
    
  • +0

    私が解決できなかったことは、CCGLSurfaceViewは.xmlファイルではなく、.javaファイルです。この場合、レイアウトにどのように追加できますか? –

    +0

    XMLタグを追加します。 「 Zoe

    +0

    これらの2行をメインアクティビティ 'mGLSurfaceView =(CCGLSurfaceView)findViewById(R.id.MyView)に追加しました。 これらの行をレイアウトxmlファイルに追加しました。 '' 私はすべてのエラーを得ることはありませんapkをビルドしている間に、アプリケーションを実行すると、org.cocos2d.opengl.CCGLSurfaceViewのInflatingクラスエラーが発生します。 どういう理由が考えられますか?あなたの助けをありがとう –