android - ArrayAdapter.createViewFromResource(int,View,ViewGroup,int)行:355 NullPointerException

时间:2010-08-23 04:25:14

标签: android

我正在设置ArrayAdapter,我收到以下错误:

 Thread [<1> main] (Suspended (exception NullPointerException)) 
ArrayAdapter.createViewFromResource(int, View, ViewGroup, int) line: 355    
ArrayAdapter.getView(int, View, ViewGroup) line: 323    
ListView(AbsListView).obtainView(int, boolean[]) line: 1294 
ListView.measureHeightOfChildren(int, int, int, int, int) line: 1198    

my symptomremedyActivity.java看起来像:

    setContentView(R.layout.symptomremedy);
    ListView remedyList = (ListView) findViewById(R.id.ListView_SymptomRemedy);
    remedyList.setTextFilterEnabled(true);
    ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.menu_item, remedyArray);
    remedyList.setAdapter(adapt);

我的symptomremedy.xml布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/Button_BACK"
android:layout_width="wrap_content"
android:layout_height="@dimen/menu_button_height"
android:layout_alignTop="@+id/Button_BACK"
android:layout_below="@+id/ImageView_MenuHeader"
android:textSize="@dimen/menu_button_text_size"
android:text="@string/back"></Button>

<ListView
        android:layout_height="wrap_content"
        android:id="@+id/ListView_SymptomRemedy"
        android:layout_width="fill_parent"
        android:background="@color/menu_white"
        android:divider="@drawable/straight_divider"
        android:listSelector="@drawable/textured"
        android:layout_alignParentTop="true"></ListView>

</LinearLayout>

和menu_item.xml布局如下所示:

<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:textSize="@dimen/menu_item_size"
android:text="test string"
android:textColor="@color/menu_black"
android:layout_height="fill_parent"
 />

我在其他活动中做过类似的事情,没有任何问题,所以我无法弄清楚为什么这里有问题。所涉及的所有字段都是非空的,即remedyArray等。任何人都知道问题是什么?

4 个答案:

答案 0 :(得分:9)

原来问题在于我为ArrayAdapter创建数组的方式。以前我的代码是:

String remedyArray[] = new String[30];

当我将代码更改为:

    String remedyArray[] = new String[30];
    for ( int i = 0; i< 30; i++){
            remedyArray[i] = "";
    }
一切顺利。我不完全理解为什么,但似乎用数值初始化数组就行了。我想Java的一个独特之处在于,当创建一个数组时,这些条目包含null,我认为是那些导致问题的空值。

答案 1 :(得分:8)

中的NullPointerException
ArrayAdapter.createViewFromResource

表示问题来自

R.layout.menu_item

如果此文件存在于/ res / layout /下,请检查它是否已在R.java中注册

另外,您使用的是自定义ArrayAdapter吗?如果是,请使用代码更新问题。

如果您没有使用自定义ArrayAdapter,请尝试在menu_item中为TextView添加标识符。如果您没有覆盖getView,Android将尝试使用 remedyList 中的数据填充resourceId(menu_item.xml)中的TextView。我从来没有这样做,但你可能需要使用这个构造函数指定TextView id:

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

检查ArrayAdapter构造函数。

答案 2 :(得分:0)

我的问题是自定义项目布局和下拉项目布局没有使用相同的主文本视图ID;主要是因为我想创建一个自定义项目,但保持默认的下拉项目。

两个视图中textViewResourceId中的id必须相同。

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

使用相同的textview id创建自定义下拉列表解决了问题。

答案 3 :(得分:0)

很抱歉挖掘这个问题,但我今天遇到了这个问题,我理解为什么会这样。

如果为新创建的数组静态分配一些空间(即String[] array = new String[80]),则必须确保填充数组的所有81个位置。因为如果不这样做,他们将填充null值,从而导致NullPointerException

当你用空字符串填充数组时,你基本上找到了解决这个问题的方法。