2014-09-11 178 views
-1

我想设置一个适配器这种方式来显示一个ListView:错误:NullPointerException异常

public class DrugAdapter extends ArrayAdapter { 

    Context context; 
    Resources resources; 

    private List<DrugModel> drug; 
    private LayoutInflater myInflater; 

    public DrugAdapter(Context context, ArrayList<DrugModel> listOfDrugs) { 
     super(context, R.layout.activity_main, listOfDrugs); 

     this.context = context; 
     this.drug = listOfDrugs; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     resources = context.getResources(); 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.activity_main, parent, false); 

     TextView name = (TextView) convertView.findViewById(R.id.list_item_name); 
     TextView description = (TextView) convertView.findViewById(R.id.list_item_description); 

     name.setText(drug.get(position).getName()); // HERE IS WHERE THE ERROR MESSAGE OCCURS 
     Typeface tf = Typeface.createFromAsset(context.getAssets(), "arial.ttf"); 
     name.setTypeface(tf); 
     description.setText(drug.get(position).getDescription()); 

     return convertView; 
    } 
} 

但我收到此错误信息:

FATAL EXCEPTION: main 
    java.lang.NullPointerException 
      at com.mypharmacy.adapters.DrugAdapter.getView(DrugAdapter.java:47) 
      at android.widget.AbsListView.obtainView(AbsListView.java:2465) 
      at android.widget.ListView.makeAndAddView(ListView.java:1775) 
      at android.widget.ListView.fillDown(ListView.java:678) 

activity_main.xml中

<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" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.mypharmacy.app.MainActivity"> 

    <EditText 
     android:id="@+id/search_drugs_edittext" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="@string/search_for_a_drug" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true"> 

     <requestFocus/> 
    </EditText> 

    <ListView 
     android:id="@+id/list_of_drugs" 
     android:layout_below="@id/search_drugs_edittext" 
     android:layout_width="fill_parent" 
     android:layout_height="425dp" 
     android:minHeight="?android:attr/listPreferredItemHeight" /> 

</RelativeLayout> 

list_item.xml

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:minHeight="70dp" > 

    <TextView 
     android:id="@+id/list_item_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="name: init value" 
     android:textColor="#008019" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:id="@+id/list_item_description" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="description: init value" 
     android:textColor="#0080A9" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:layout_below="@+id/list_item_name" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginLeft="54dp" 
     android:layout_marginTop="50dp" /> 

</RelativeLayout> 

用哪个我无法弄清楚什么是错的。请问如何解决这个问题?为什么name变量取值为Null?

+0

检查在drug.get(位置)的值.getName()我认为它是空的 – 2014-09-11 08:14:56

+0

如果'name'为空,则表示没有视图在布局'activity_main'中发现id为'list_item_name'。你能向我们展示布局吗? – 2014-09-11 08:15:15

+0

你需要进行调试以确定'name'是否为null或'drug.get(position)'为null – 2014-09-11 08:19:01

回答

0

我认为你的问题在这一行。

convertView = inflater.inflate(R.layout.activity_main, parent, false); 

你可能夸大了错误的布局,如果是这样的情况下,即使你把这个行:

convertView.findViewById(R.id.list_item_name); 

R.id.list_item_name是有效的,该ID是不是在该布局。如果您致电findViewById夸大了不同的布局,您将收到一个空项目。

希望它可以帮助

+0

我刚刚更新了我的文章,发布了'activity_main.xml'和'list_item.xml'。 – user3797031 2014-09-11 08:32:24