2016-08-17 5 views
0

Android Studio에서 JSON Object의 항목을 Listview에 넣으려고하는데 프로그램이 제대로 작성되지 않고 작동하지 않아 오류가 발생하지 않습니다.Listview에 JSON 객체 넣기

public class Terminal { 
    @JsonProperty("terminal") public String terminal; 
    @JsonProperty("registered") public boolean registeredTerminals; 
    @JsonProperty("ip") public String ip; 
    @JsonProperty("user_agent") public String userAgent; 

    public String getTerminal(){ 
     return terminal; 
    } 

    public Boolean getRegisteredTerminals(){ 
     return registeredTerminals; 
    } 

    public String getIp(){ 
     return ip; 
    } 

    public String getUserAgent(){ 
     return userAgent; 
    } 
} 

내 어댑터 클래스 :

public class TerminalStatusAdapter extends ArrayAdapter<Terminal> { 

    private TerminalHolder holder; 
    private Context context; 
    private List<Terminal> items; 

    public TerminalStatusAdapter(Context context, List<Terminal> items) { 
     super(context, R.layout.terminal_status_row); 
     this.context = context; 
     this.items = items; 
    } 

/* 
    @Override 
    public int getCount() { 
     if(items == null) { 
      items = new Terminal(); 
     } 
     return items; 
    }*/ 

    @Override 
    public Terminal getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //final Terminal item = items.get(position); 
     holder = null; 
     if(convertView == null){ 
      convertView = LayoutInflater.from(this.context).inflate(R.layout.terminal_status_row, parent, false); 
      holder = new TerminalHolder(); 
      holder.txtTerminalStatus = (TextView) convertView.findViewById(R.id.txt_terminal_status); 
      holder.txtRegisteredTermninal = (TextView)convertView.findViewById(R.id.txt_registered_status); 
      holder.txtIp = (TextView)convertView.findViewById(R.id.txt_ip); 
      holder.txtUserAgent = (TextView)convertView.findViewById(R.id.txt_user_agent); 
      convertView.setTag(holder); 
     }else { 
      holder = (TerminalHolder) convertView.getTag(); 
     } 
     holder.txtTerminalStatus.setText(items.get(position).getTerminal()); 
     holder.txtRegisteredTermninal.setText(items.get(position).getRegisteredTerminals().toString()); 
     holder.txtIp.setText(items.get(position).getIp()); 
     holder.txtUserAgent.setText(items.get(position).getUserAgent()); 

     return convertView; 
    } 

    private class TerminalHolder { 

     public TextView txtTerminalStatus; 
     public TextView txtRegisteredTermninal; 
     public TextView txtIp; 
     public TextView txtUserAgent; 
    } 
} 

다음
public class TerminalStatus { 
    @JsonProperty("terminals") private List<Terminal> terminals; 

    public List<Terminal> getTerminals(){return terminals;} 

} 

터미널 클래스 :

여기
{ 
    "success": true, 
    "body": { 
    "terminals": [ 
     { 
     "terminal": "terminal1", 
     "registered": true, 
     "ip": "123456789", 
     "user_agent": "X-Lite " 
     }, 
     { 
     "terminal": "terminal2", 
     "registered": false 
     }, 
     { 
     "terminal": "terminal3", 
     "registered": false 
     }, 
     { 
     "terminal": "terminal4", 
     "registered": false 
     } 
    ] 
    }, 
    "error": null 
} 

는 TerminalStatus 클래스입니다 : 여기 는 JSON 개체입니다 마이 n 클래스 JSON의 내용을 표시 할 수없는 Listview가있는 개체 Object :

public class CallTerminal extends Fragment{ 
     private ListView terminalStatusRegistered; 
     private TerminalStatusAdapter terminalStatusAdapter; 
     public ArrayList<Terminal> terminalRegisteredData = null; 

     @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View v = inflater.inflate(vm.voicemail.app.R.layout.call_terminal_fragment, container, false); 
      terminalStatusRegistered = (ListView)v.findViewById(R.id.list_registered_terminals); 
    return v; 
    } 
     try { 
          ApiResponse<TerminalStatus> resp = new ApiResponse<TerminalStatus>(s, TerminalStatus.class); 
    try { 
     terminalStatus = resp.getObject(); 
     terminalRegisteredData = new ArrayList<Terminal>(); 
     terminalStatusAdapter = new TerminalStatusAdapter(getContext(), terminalRegisteredData);      terminalStatusRegistered.setAdapter(terminalStatusAdapter); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } catch (IOException e) { 
    e.printStackTrace(); 
} 
    } 

어디가 잘못 되었나요? 감사.

+0

당신이 단자를 추출하고 있습니까 부분 "s"와 그 방법으로 보내는 것? "s"문자열의 값을 확인하십시오. – sumandas

+0

제발, 당신은 더 명백 할 수 있습니까? – ruru

+0

확실히, ApiResponse resp = 새로운 ApiResponse (s, TerminalStatus.class); 행은 변수 s를 사용하고이 변수의 값을 확인하십시오. – sumandas

답변

0

난 내가 내 코드의 몇 가지 변경을했다, 내 문제의 해결책을 찾았지만, 가장 중요한 부분은 어댑터 클래스에서 누락 된이 라인 (TerminalStatusAdapter)입니다 :

super(context, R.layout.terminal_status_row, terminalStatus.getTerminals()); 
0

을 시도하십시오 문자열을 추가 : 그 안전을 위해이 문자열이 작동 할 수

String s = " {\r\n" + 
     " \"terminals\": [\r\n" + 
     "  {\r\n" + 
     "  \"terminal\": \"terminal1\",\r\n" + 
     "  \"registered\": true,\r\n" + 
     "  \"ip\": \"123456789\",\r\n" + 
     "  \"user_agent\": \"X-Lite \"\r\n" + 
     "  },\r\n" + 
     "  {\r\n" + 
     "  \"terminal\": \"terminal2\",\r\n" + 
     "  \"registered\": false\r\n" + 
     "  \"ip\": \"123456789\",\r\n" + 
     "  \"user_agent\": \"X-Lite \"\r\n" + 
     "  },\r\n" + 
     "  {\r\n" + 
     "  \"terminal\": \"terminal3\",\r\n" + 
     "  \"registered\": false\r\n" + 
     "  \"ip\": \"123456789\",\r\n" + 
     "  \"user_agent\": \"X-Lite \"\r\n" + 
     "  },\r\n" + 
     "  {\r\n" + 
     "  \"terminal\": \"terminal4\",\r\n" + 
     "  \"registered\": false\r\n" + 
     "  \"ip\": \"123456789\",\r\n" + 
     "  \"user_agent\": \"X-Lite \"\r\n" + 
     "  }\r\n" + 
     " ]\r\n" + 
     " }"; 

희망 파서를 증명.

+0

죄송 합니다만, 아직 가치가 없습니다. – ruru

+0

문자열 "s"에 value 또는 resp 변수가 없습니까? – sumandas

+0

잠깐, json처럼 보이고, 터미널 구조가 다양합니다. 맨 아래 항목에 대한 ip 및 user_agent는 어디에 있습니까 – sumandas