启动ListActivity时出现NullPointerException

时间:2011-04-01 11:26:52

标签: android android-context listactivity

当我想要启动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):致命异常:主要   04-01 11:07:26.756:ERROR / AndroidRuntime(375):java.lang.RuntimeException:无法启动活动ComponentInfo {org.openintents.filemanager / org.openintents.filemanager.FileManagerSettings}:java.lang.NullPointerException   04-01 11:07:26.756:ERROR / AndroidRuntime(375):引起: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):致命异常:主要   04-01 12:06:56.315:ERROR / AndroidRuntime(669):java.lang.RuntimeException:无法启动活动ComponentInfo {org.openintents.filemanager / org.openintents.filemanager.FileManagerSettings}:java.lang.RuntimeException:Your content必须有一个ListView,其id属性为'android.R.id.list'

这是xml-File:

<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 个答案:

答案 0 :(得分:1)

如果已设置Activty的布局,则findViewById()仅返回对View的有效引用。查看您粘贴到问题中的代码,似乎您没有打电话给

setContentView(R.layout.whatever_your_layout_file_id);

您的变量settingsList将是一个空引用