2014-01-06 117 views
-5

我對下面的代碼獲得NullPointerException如何在android中解決nullpointer異常?

package com.example.extra; 

import java.util.List; 

import com.example.dto.DriverSelectedRouteArrayList; 
import com.example.main.R; 

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.BaseAdapter; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.TextView; 

public class CustomerAdapter extends BaseAdapter 
{ 

    DriverSelectedRouteArrayList driverSelectedRouteArrayList; 
    private List<DriverSelectedRouteArrayList> list; 
    private LayoutInflater layoutInflater; 
    Context context; 
    ViewHolder holder; 

    public CustomerAdapter(Context context, int resource, List<DriverSelectedRouteArrayList> driverData) 
    { 
     this.list = driverData; 
     this.context = context; 
     layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.student_list_view_itom, null); 

     if(view == null) 
     { 
      TextView textViewRouteId = (TextView) view.findViewById(R.id.srNumberTextView); 

//   convertView = layoutInflater.inflate(R.layout.student_list_view_itom, null); 
      holder = new ViewHolder(); 
      holder.srNumberTextView = (TextView) convertView.findViewById(R.id.srNumberTextView); 
      holder.nameTextView = (TextView) convertView.findViewById(R.id.textViewStudentItem); 
      holder.phoneNumberTextView = (TextView) convertView.findViewById(R.id.textViewPhoneNumber); 
      holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBoxSelectForStudentList); 
      holder.checkBox 
          .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

           @Override 
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
           { 
            int getPosition = (Integer) buttonView.getTag(); 
            list.get(getPosition).setSelected(buttonView.isChecked()); 

           } 
          }); 
          view.setTag(holder); 
          view.setTag(R.id.checkBoxSelectForStudentList,holder.checkBox); 
          view.setTag(R.id.srNumberTextView,holder.srNumberTextView); 
          view.setTag(R.id.textViewStudentItem, holder.nameTextView); 
          view.setTag(R.id.textViewPhoneNumber, holder.phoneNumberTextView); 

     }else{ 
       holder = (ViewHolder) view.getTag(); 
      } 
     holder.checkBox.setTag(position);//error in this line 
     Log.e("get position=======>", ""+list.get(position).get_id()); 
     holder.srNumberTextView.setText(String.valueOf(list.get(position).get_id())); 
     holder.nameTextView.setText(list.get(position).getFirst_name()+" " 
            +list.get(position).getMiddle_name()+" " 
            +list.get(position).getLast_name()); 
     holder.phoneNumberTextView.setText(list.get(position).getPhone_number()); 
     holder.checkBox.setChecked(list.get(position).isSelected()); 
     return view; 
    } 

    static class ViewHolder 
    { 
     protected TextView srNumberTextView; 
     protected TextView nameTextView; 
     protected TextView phoneNumberTextView; 
     protected CheckBox checkBox; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return list.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 
} 

標題的logcat:

01-06 07:42:53.132: E/AndroidRuntime(3300): FATAL EXCEPTION: main 
01-06 07:42:53.132: E/AndroidRuntime(3300): Process: com.example.main, PID: 3300 
01-06 07:42:53.132: E/AndroidRuntime(3300): java.lang.NullPointerException 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at com.example.extra.CustomerAdapter.getView(CustomerAdapter.java:73) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.widget.ListView.onMeasure(ListView.java:1175) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.View.measure(View.java:16497) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.View.measure(View.java:16497) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.View.measure(View.java:16497) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.View.measure(View.java:16497) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.View.measure(View.java:16497) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.Choreographer.doFrame(Choreographer.java:544) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.os.Handler.handleCallback(Handler.java:733) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.os.Handler.dispatchMessage(Handler.java:95) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.os.Looper.loop(Looper.java:136) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at java.lang.reflect.Method.invoke(Method.java:515) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
01-06 07:42:53.132: E/AndroidRuntime(3300):  at dalvik.system.NativeStart.main(Native Method) 
+0

什麼是線73? – Aashir

+0

什麼是CustomAdapter.java中的第73行 – InnocentKiller

+4

有一個叫** **的事情** – Cris

回答

5

更改爲

holder.srNumberTextView = (TextView) view.findViewById(R.id.srNumberTextView); 

它同其他觀點。使用view.findViewById而不是convertView.findViewById

layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    // already initialized in the constructor of adapter class 
    // no need to initialize in getView 

你需要移動

holder.checkBox.setOnCheckedChangeListener 

出來的,如果一部分

你有

int getPosition = (Integer) buttonView.getTag(); 

你setTag到複選框甚至在此之前。

可能還有其他錯誤。我指出了一些我可以睜大眼睛看。

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 

    ViewHolder holder; 
    if(convertView == null) 
    { 

     convertView = layoutInflater.inflate(R.layout.student_list_view_itom, null); 
     holder = new ViewHolder(); 
     holder.textViewRouteId = (TextView) convertView.findViewById(R.id.srNumberTextView); 
     holder.srNumberTextView = (TextView) convertView.findViewById(R.id.srNumberTextView); 
     holder.nameTextView = (TextView) convertView.findViewById(R.id.textViewStudentItem); 
     holder.phoneNumberTextView = (TextView) convertView.findViewById(R.id.textViewPhoneNumber); 
     holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBoxSelectForStudentList); 
     convertView.setTag(holder); 

    }else{ 
      holder = (ViewHolder) convertView.getTag(); 
     } 

    // update your views here 
    return convertView; 
    } 

然後

static class ViewHolder 
{ 
    protected TextView srNumberTextView,textViewRouteId; 
+0

請告訴我我在哪裏更改了我的代碼.. – Nitin

+0

@Nitin在#73行,您正在聲明您的TextView。 – Vigbyor

+0

@Nitin確保xml佈局中的視圖ID匹配那些在java代碼 – Raghunandan