2012-04-18 154 views
6

我正在爲具有自定義列表的ListView編寫自定義適配器。自定義適配器中的NullPointerException getView

顯然,我必須寫getView函數。所以這裏是我的代碼:

/*1*/ public View getView(int position, View convertView, ViewGroup parent) { 
/*2*/ View vi = convertView; 
/*3*/ if (convertView == null) 
/*4*/  vi = inflater.inflate(R.layout.result_list_item, null); 
/*5*/ 
/*6*/ TextView title = (TextView) vi.findViewById(R.id.tvTitle); 
/*7*/ TextView subtitle = (TextView) vi.findViewById(R.id.tvSubTitle); 
/*8*/ ImageView image = (ImageView) vi.findViewById(R.id.imageView1); 
/*9*/ 
/*10*/ title.setText(data.get(position).getDescription().toString()); 
/*11*/ subtitle.setText(data.get(position).getDate().toString()); 
/*12*/ String img = "http://someLink/" + data.get(position).getId() + "a_t.jpg"; 
/*13*/ imageLoader.DisplayImage(img, image); 
/*14*/ return vi; 
/*15*/ } 

但是,我注意到在第6行程序崩潰與NullPointer異常。

這裏是我的崩潰報告:

04-18 09:33:32.745: E/AndroidRuntime(2209): FATAL EXCEPTION: main 
04-18 09:33:32.745: E/AndroidRuntime(2209): java.lang.NullPointerException 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at com.package.mojo.NoPicAdapter.getView(NoPicAdapter.java:46) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.AbsListView.obtainView(AbsListView.java:1554) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1264) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.ListView.onMeasure(ListView.java:1175) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:386) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewRoot.performTraversals(ViewRoot.java:847) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1868) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.os.Looper.loop(Looper.java:123) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.app.ActivityThread.main(ActivityThread.java:3691) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at dalvik.system.NativeStart.main(Native Method) 
當然

,佈局和項目本身存在...

有什麼想法?

更新:當我在調試時查看變量時,我看到vi沒有被充氣(vi == null),爲什麼?

+1

您能否告訴我們您發佈的代碼片段中的哪一行對應於'NoPicAdapter.java:46'? – dbm 2012-04-18 06:53:20

+0

上述代碼中的行號是否對應於NoPicAdapter中的行號46?另外你如何創建inflater對象? – Shubhayu 2012-04-18 06:53:57

+0

第6行實際上是第46行的原代碼,剛剛在這裏編輯了它的海豚來解釋我的問題 – thepoosh 2012-04-18 07:03:23

回答

13

更改此:

vi = inflater.inflate(R.layout.result_list_item, null); 

要這樣:

vi = inflater.inflate(R.layout.result_list_item, parent, false); 

這是您的適配器應該如何:

public class NoPicAdapter extends ArrayAdapter<NewAndCalendar> { 

    private ArrayList<NewAndCalendar> data; 
    private Activity mActivity; 
    private LayoutInflater inflater = null; 

    public NoPicAdapter(Activity a, ArrayList<NewAndCalendar> d) { 
     super(a, R.layout.no_pic_list_item, d); 
     mActivity = a; 
     data = d; 
     inflater = (LayoutInflater) mActivity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     if (vi == null) 
      vi = inflater.inflate(R.layout.no_pic_list_item, parent, false); 
     TextView title = (TextView) vi.findViewById(R.id.noPicTitle); 
     TextView subtitle = (TextView) vi.findViewById(R.id.noPicSubtitle); 

     title.setText(data.get(position).getmTitle()); 
     subtitle.setText(data.get(position).getmPubDate()); 

     return vi; 
    } 

} 
+0

更改爲第二個版本,vi仍然等於null – thepoosh 2012-04-18 07:01:42

+0

粘貼您的完整代碼 – waqaslam 2012-04-18 07:02:25

+0

[this](http:// pastie。 org/private/nipgdadde02hft9gx0f0a)是我自定義適配器 – thepoosh 2012-04-18 07:06:06

1

你初始化吹氣?如果沒有初始化它。

inflater = getLayoutInflater(); 

inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
+1

初始化代碼在構造函數中: 'inflater =(LayoutInflater)mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);' – thepoosh 2012-04-18 06:58:29

+0

並且是活動上下文中的活動? – Shubhayu 2012-04-18 07:00:10

+0

是的,mActivity是爲構造函數傳遞的活動。 – thepoosh 2012-04-18 07:04:22

2

嘗試此

VI = LayoutInflater.from(mActivity).inflate(R.layout.result_list_item,NULL);

如果mActivity是您從創建此適配器的對象的活動傳遞的Activity上下文。

+0

這樣做的伎倆,現在唯一的問題是我從其他代碼中得到的非常新的'NullPointerException' ... – thepoosh 2012-04-18 07:11:19

+0

新問題是什麼? – Shubhayu 2012-04-18 07:29:47

+0

實現SAXParser的問題我想。有些東西沒有被正確解析 – thepoosh 2012-04-18 07:50:43

相關問題