2012-04-18 14 views
6

カスタムリストを持つListViewのカスタムアダプタをコーディングしています。カスタムアダプタgetViewのNullPointerException

明らかに、私は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) 

、レイアウト自体が存在してアイテムが...

任意の考え?

update:デバッグ中に変数を見ると、viが膨らんでいないことがわかります(vi == null)、なぜですか?

+1

投稿されたコードスニペットのどの行が 'NoPicAdapter.java:46'に対応しているか教えてください。 – dbm

+0

上記コードの行番号6は、NoPicAdapterの行番号46に対応していますか?また、インフレータオブジェクトをどのように作成していますか? – Shubhayu

+0

行6は、実際には元のコードの行46です。私の質問を説明するポルポワーズのためにここに編集しました。 – thepoosh

答えて

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

は2番目のバージョンに変更されました、viはまだnullと等しくなりました。 – thepoosh

+0

フルコードを貼り付けます – waqaslam

+0

[this](http:// pastie。 org/private/nipgdadde02hft9gx0f0a)は、カスタムアダプタ – thepoosh

1

あなたはインフレータを初期化していますか?それを初期化しない場合。

inflater = getLayoutInflater(); 

又は

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

初期化コードはコンストラクタ内にあります: 'inflater =(LayoutInflater)mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);' – thepoosh

+0

とアクティビティから継承したアクティビティコンテキストは? – Shubhayu

+0

はい、mActivityは、コンストラクタで渡されたアクティビティです。 – thepoosh

2

この

VI = LayoutInflater.from(mActivity).inflate(R.layout.result_list_item、NULL)を試してみてください。

mActivityが、このアダプタのオブジェクトを作成しているアクティビティから渡されたアクティビティコンテキストの場合。

+0

はそのトリックをしましたが、唯一の問題は残りのコードから得た非常に新しい 'NullPointerException'です... – thepoosh

+0

新しい問題は何ですか? – Shubhayu

+0

SAXParserの実装に問題があると思います。何かが正しく解析されていない – thepoosh

関連する問題