2012-12-15 4 views
0

내 응용 프로그램에서 나는 일부 로그 정보를 표시하기 위해 Android 사용자 정의보기를 사용합니다. 그 견해에서 나는 어떤 기준에 따라 항목의 색을 바꾸고 싶다. 나는 아래 코드와 함께 getView에서 NullPointerException을 일으켰다.안드로이드에서 NullPointerException 사용자 지정 목록보기

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    try { 
     View row = convertView; 
     ItemHolder holder = null; 

     if(row == null){ 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResouceId, parent, false); 

      holder = new ItemHolder(); 
      holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon); 
      holder.txtPhoneno = (TextView)row.findViewById(R.id.lvphoneno); 
      holder.txtDateTime = (TextView)row.findViewById(R.id.lvdatetime); 
      holder.txtSerialno = (TextView)row.findViewById(R.id.lvserialno); 
      holder.txtStatus = (TextView)row.findViewById(R.id.lvstatus); 

      row.setTag(holder); 
     } 
     else { 
      holder = (ItemHolder)row.getTag(); 
     } 

     MyListViewItem item = items.get(position); 
     holder.imgIcon.setImageResource(item.icon); 
     holder.txtPhoneno.setText(item.phoneno); 
     holder.txtDateTime.setText(item.datetime); 
     holder.txtSerialno.setText(item.serialno); 

     if(!item.status.isEmpty()){ 
      if(-1 != item.status.indexOf("OK")) 
       holder.txtStatus.setTextColor(Color.GREEN); 
      else 
       holder.txtStatus.setTextColor(Color.RED); 
     } 

     holder.txtStatus.setText(item.status); 
     return row;   
    } 
    catch (Exception e) { 
     Helper.Log(getContext(), e.toString()); 
    } 
    return null; 
} 

하지만 난 줄 아래에 제거 할 때 흥미로운 점은, 그것은

 if(!item.status.isEmpty()){ 
      if(-1 != item.status.indexOf("OK")) 
       holder.txtStatus.setTextColor(Color.GREEN); 
      else 
       holder.txtStatus.setTextColor(Color.RED); 
     } 

로그 캣

12-15 07:04:49.668: E/AndroidRuntime(331): FATAL EXCEPTION: main 
    12-15 07:04:49.668: E/AndroidRuntime(331): java.lang.NullPointerException 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.AbsListView.obtainView(AbsListView.java:1432) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.ListView.makeAndAddView(ListView.java:1745) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.ListView.fillDown(ListView.java:670) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.ListView.fillSpecific(ListView.java:1302) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.ListView.layoutChildren(ListView.java:1576) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.view.View.layout(View.java:7175) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.view.View.layout(View.java:7175) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.view.View.layout(View.java:7175) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.view.View.layout(View.java:7175) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.view.View.layout(View.java:7175) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.os.Handler.dispatchMessage(Handler.java:99) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.os.Looper.loop(Looper.java:123) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at android.app.ActivityThread.main(ActivityThread.java:3683) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at java.lang.reflect.Method.invokeNative(Native Method) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at java.lang.reflect.Method.invoke(Method.java:507) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    12-15 07:04:49.668: E/AndroidRuntime(331): at dalvik.system.NativeStart.main(Native Method) 

이 문제를

감사

+0

어플이 추락했을 때 항상 LogCat을 게시해야하지만 어쨌든 추측을했습니다. – Sam

+0

예외 블록 외부의 getView()에서 null을 반환하는 이유는 무엇입니까? - 나쁜 냄새가납니다 !!!! NPE 자체에 관해서는'layoutResouceId'가 ** row **에 대한 실제 리소스가 ** 비 null이어야 함을 확신합니까? 그렇다면 NPE가 다른 곳에서 나옵니다. - logcat please! – t0mm13b

답변

1
를 해결하기 위해 좀 도와주세요 잘 작동

나는 status가 null 인 것을 내기 것 :

if(-1 != item.status.indexOf("OK")) 

item 분명히 null가 아니고, holder.txtStatus.setText() 가정하면 이것은 단지 status 잎, 어느 쪽 NPE를 포기하지 않습니다 ...

(하지만 더 정보가없는 I

+0

null 상태 검사기 및 logcat으로 내 질문을 수정했습니다. – Riskhan

+0

어떤 API를 테스트 중입니까? – Sam

+0

listview의 입력 데이터가 데이터베이스에서옵니다. 상태 값을 확인했는데, null이 아닙니다. 널 값을 확인하기 위해 변경되었습니다. 어쨌든 고맙습니다. – Riskhan

관련 문제