2013-03-19 448 views
1

我試圖在我的第一個Android項目中配置AdMod。當我嘗試運行該應用程序時,findViewByID始終返回null。AdMob findViewById返回null

這是我的主要活動的代碼:

import android.app.Activity; 
import android.content.Context; 
import android.content.res.Configuration; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.os.Bundle; 
import android.os.PowerManager; 
import android.os.PowerManager.WakeLock; 
import android.view.Window; 


    import android.view.WindowManager; 

public abstract class MyAndroidApp extends Activity { 
    AdView adView; 
    public static final String MY_PUBLISHER_ID = "***********"; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    AdRequest adRequest = new AdRequest(); 
    adRequest.addTestDevice(AdRequest.TEST_EMULATOR); 
    adView = new AdView(this, AdSize.BANNER, MY_PUBLISHER_ID); 

    //R.id.main has value, I can see it in Eclipse 
    RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main); 


    if (mainLayout == null) 
     Log.d("Error","Layout is null"); 
    else 
    mainLayout.addView(adView); 

    adView.loadAd(adRequest); 

XML文件(下RES \佈局)有以下幾點:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MyApp"  
    android:id="@+id/main"> 

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

當我調試,我可以爲R.看到價值id.main。但是,mainLayout的值仍然爲空。

在此先感謝。

+0

爲了使findViewById正常工作,您必須先前調用setContentView – 2013-03-19 20:45:05

回答

4

問題是,你是不是在調用的onCreate setContentView()()方法:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layoutId); 
    RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main); 
} 

沒有它,你會得到永遠NPE因爲UI元素沒有創建的實例(的setContentView方法的目的)和由findViewById()返回的查看被分配給NULL

因此,添加這一行,它應該工作。

1

在調用findViewById之前,應該調用setContentView方法並使用適當的佈局。它通常被稱爲onCreate(Bundle savedInstance)方法。