2017-11-16 10 views
0

내 응용 프로그램에서 메시지를 보낸 후 다시로드되는 사용자 지정 어댑터 listview가 있습니다. 이 응용 프로그램은 일부 설치에서 문제가 발생합니다. 나는 스택 트레이스를 콘솔에 가지고있다. 여기에 코드 :사용자 정의 adatper getView null 포인터를 반환합니다

class IconicAdapter extends ArrayAdapter<Integer> { 
     Activity context; 

     IconicAdapter(Activity context) { 
      super(context, R.layout.message_layout, listItems); 

      this.context = context; 
     } 

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


       //you can access layout inflater by accessing hosting activity 
       convertView = getActivity().getLayoutInflater().inflate(R.layout.message_layout, parent, false); 


      JSONObject json_data = null; 
      try { 
       json_data = jArray.getJSONObject(position); 
      } catch (JSONException e) { 
      } 

      try { 
       tv = (TextView) convertView.findViewById(R.id.username); 
       tv.setText(json_data.getString("username")); 

여기에 스택 추적 :

java.lang.NullPointerException: 
    at com.testing.gold.CommunityFragment$IconicAdapter.getView (CommunityFragment.java:945) 
    at android.widget.HeaderViewListAdapter.getView (HeaderViewListAdapter.java:232) 

라인 945 : tv.setText (json_data.getString ("이름"));

+0

아마 당신의 json_data가 null의 경우, 스택 트레이스 인쇄 : 캐치 (JSONException 전자를) { } – diegoveloper

+0

는 더 캐치 내부도 e.printstacktrace 스택 트레이스 – tobias

+0

인쇄에서 JSON에 대해 아무것 json_data와는 없습니다. 그리고 로그를 넣으십시오. – diegoveloper

답변

1

를 사용하여 다음 코드를 클래스 IconicAdapter는 ArrayAdapter와 { 활동 컨텍스트를 확장;

IconicAdapter(Activity context) { 
    super(context, R.layout.message_layout, listItems); 

    this.context = context; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    convertView=LayoutInflater.inflate(R.layout.message_layout, null); 
    JSONObject json_data = null; 
    try { 
     json_data = jArray.getJSONObject(position); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
tv = (TextView) convertView.findViewById(R.id.username); 

if(json_data!=null) 
    tv.setText(json_data.getString("username")); 
else 
    tv.setText("") 
+0

당신은 바로 json_data가 null입니다. 그러나 나는 왜 이해하지 못한다. 그것은 약간의 시간과 때로는 작동하지 않습니다. – tobias

+0

흠. [email protected]에서 코드를 보내 드리겠습니다. 내가 확인하겠습니다. –

1
class IconicAdapter extends ArrayAdapter<Integer> { 
    Activity context; 

    IconicAdapter(Activity context) { 
    super(context, R.layout.activity_main, new Integer[]{1, 2}); 
    this.context = context; 
} 

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

    convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main, null); 
    JSONObject json_data = null; 
    try { 
     json_data = jArray.getJSONObject(position); 
     tv = (TextView) convertView.findViewById(R.id.username); 
     tv.setText(json_data.getString("username")); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    return convertView; 
} 

}

+0

그것은 조각에서 실행되는 것이 중요합니까? – tobias

+0

조각을 위해 어댑터를 사용하고 있다면 그렇지 않습니다. –

+0

LayoutInflater.inflate 날 오류 – tobias