2011-04-01 28 views
0

我工作了幾個小時,我得到一個錯誤,當我想啓動一個ListActivity。 關於我想要做什麼的簡短解決方法: 我有一個主要的應用程序和一個普通菜單,我想從中啓動一個設置列表,用戶可以在其中添加特定設置。NullPointerException當啓動ListActivity時

我試圖啓動的ListView這樣的:

startActivity(new Intent(this, FileManagerSettings.class)); 

然後在上創建方法,我得到了錯誤:

 userSettings = deserializeObject(); 

    if(userSettings.isEmpty()) 
    { 
     userSettings.add(new SettingItem("Camera", android.os.Environment.DIRECTORY_DCIM, false)); 
    } 
    super.onCreate(icicle); 
    Context mContext = this.getApplicationContext(); 
    settingsList = (ListView)findViewById(R.id.list_settings); 
    settingsList.setAdapter(new CustomSettingsAdapter(mContext, userSettings)); 

最後一行導致錯誤。爲了更好地理解這裏的適配器類的構造函數:

 public CustomSettingsAdapter(Context context, ArrayList<SettingItem> sitems) 
{ 
    settingsArrayList = sitems; 
    mInflater = LayoutInflater.from(context); 
} 

這裏是從logcat的錯誤(對不起,不知道該怎麼給它正確的格式)

04-01 11:07:26.756: ERROR/AndroidRuntime(375): FATAL EXCEPTION: main 04-01 11:07:26.756: ERROR/AndroidRuntime(375): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.openintents.filemanager/org.openintents.filemanager.FileManagerSettings}: java.lang.NullPointerException 04-01 11:07:26.756: ERROR/AndroidRuntime(375): Caused by: java.lang.NullPointerException 04-01 11:07:26.756: ERROR/AndroidRuntime(375): at org.openintents.filemanager.FileManagerSettings.onCreate(FileManagerSettings.java:43)

在我的思想該錯誤是由於上下文的LayoutInflater爲空...但我不知道如何獲得LayoutInflater,甚至不知道這是否真的是錯誤...

編輯:錯誤日誌使用setContentView():

04-01 12:06:56.315: ERROR/AndroidRuntime(669): FATAL EXCEPTION: main 04-01 12:06:56.315: ERROR/AndroidRuntime(669): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.openintents.filemanager/org.openintents.filemanager.FileManagerSettings}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

這是XML的文件:

<LinearLayout android:layout_width="fill_parent" 
    android:id="@+id/list" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView android:id="@+id/settings_list_title" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:text="@string/settings_header" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:gravity="center" /> 
    <ListView android:id="@+id/list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    </LinearLayout> 
+1

你確定你有一個ListView有了這個ID? R.id.list_settings – RoflcoptrException 2011-04-01 11:28:45

+0

是的。絕對確定。 – 2011-04-01 11:33:29

+0

你可以測試女巫變量是空的... ListView,適配器或上下文。 – RoflcoptrException 2011-04-01 11:36:21

回答

1

findViewById()只有當Activty的佈局已設置返回到一個視圖的有效參考。看着您粘貼到您問題的代碼,它不會出現您撥打電話到

setContentView(R.layout.whatever_your_layout_file_id); 

您的變量settingsList,然後將一個空引用

+0

我以前試過,但我讀過,使用ListActivity時內容視圖不是必需的... – 2011-04-01 12:08:27

+0

任何活動都必須指定佈局。如果沒有通過設置佈局生成視圖,則無法請求活動性按ID查找視圖。 R.id.list_settings是否與ListView關聯?看看這個鏈接:http://www.higherpass.com/Android/Tutorials/Creating-Lists-Using-The-Android-Listactivity/ – 2011-04-01 12:14:10

+0

我編輯了上面的XML ...當我更改代碼請求的佈局 - 文件,其中包含ListView我得到另一個錯誤。 (我之前得到了這個錯誤,當我搜索一個解決方案時,我發現了一個線程,在一個ListActivity中,setContentView()方法是不需要的...但是,然後我試圖找出這個其他錯誤的含義。 – 2011-04-01 12:41:03

相關問題