2016-07-25 1 views
0

내 서버는 Rails 4.x와 API를 통해 레코드를 반환하기 위해 사용하는 to_json 메서드로 작성되어 JSON 배열을 이 :안드로이드/자바 : 레일스에서 ​​오는 JSON의 파스 배열

[{"id":503240,"name":"bob"},{"id":503241,"name":"Tom"}] 

안드로이드는 괜찮아요. 문자열로 사용하고 기록하는 데 문제가 없습니다.

이제 배열의 각 항목을 통해 루프를 실행하여 ID를 가져옵니다 (궁극적으로 ListView에 표시).

내가해야 할 일은 각각의 개체를 "보는"것입니다. 그래서 다음 코드 줄을 사용하여 위 구문 분석하고 있습니다 :

JSONArray jsonResponse = new JSONArray(jsonString); 

그것은 "파싱"오류없이,하지만 ... 내가 jsonResponse 그런 짓을하려고 할 때 [1], 또는 jsonResponse.getObject (1) 배열의 요소 중 하나에 손을 넣기 위해 (예를 들어 로그 만 남기고) IDE를 지나치게 할 수는 없다.

개별 json 개체를 처리하고 조작 할 수 있다면 개별 데이터 요소를 처리하는 데 문제가 없을 것입니다. 이것이 문제를 일으키는 배열의 배열입니다.

저는 Java에 조금 익숙하지 않습니다. 저는 Ruby와 Swift에 버릇이 있습니다. 나는 기본적인 것을 놓치고있다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

미리 감사드립니다.

+0

가능한 복제와 같은 루프를 사용 (http://stackoverflow.com/questions/2591098/how-to- [자바에서 JSON을 구문 분석하는 방법] parse-json-in-java) –

답변

0

Android의 JSONArray 인스턴스에는 getObject 메소드가없는 것 같습니다. 문서 here. JSONObject

0

JSONArray의 배열 인

jsonResponse.getJSONObject(1) 

jsonResponse 때문에 JSONArray에서 발견되는 종류 된 JSONObject의 항목을 반환 JSONObject getJSONObject(int position)라는 방법을 포함

나는 당신이 필요로하는 것 같다 네가 요구 한 위치에

이제 listview에 json 배열을 채우려면 listview에 대한 어댑터를 만들어야하며 각 행에는 배열의 각 항목에 대한 데이터가 포함되어야합니다.

가장 일반적인 어댑터가 BaseAdapter 클래스를 확장하고, 당신은 몇 가지 방법을 구현해야합니다 것을 알 수 주이

  • getCount 있습니다 - 일반적으로 배열에있는 항목의 수를 반환 그래서 기본적으로 0을 반환하면 아무 것도 볼 수 없지만 배열의 크기 나 1을 반환하면 listview의 행 수가 같아집니다.
  • getView - 각 행의 뷰를 반환하는이 메서드에서 행을 확대 한 후에 행의 뷰를 팽창해야합니다 (행의 레이아웃이 될 XML 파일을 만들어야 함). textview, imageview와 같은 모든 elemnts는 배열의 각 항목에서 데이터를 채워야합니다.이 방법의 작동 방식은 다음과 같습니다.이 메소드의 인수 중 하나는 행의 위치이므로 사용자가 목록을 스크롤 할 때이 메소드가 호출되고 위치가 자동으로 업데이트됩니다.이 경우 특정 항목을 배열의 yourJSONArray.getJSONObject(position)으로 호출 한 다음 각 텍스트 필드에 원하는 데이터를 입력하면됩니다. ViewHolder라는 뭔가가 성취도 몇 가지 유용한를 만들기 위해, 당신은 행보기를 팽창 사용자가 스크롤 할 때마다 &을 만들 안드로이드에서 피하기 위해이 일을 만들 것을

알 수 있습니다.

한 가지 더 읽는 것 또한 recycleview를 읽고 확인할 수 있다는 것입니다. JSONArray를 통해 반복하려면

0

단지의

try { 
    JSONArray array = new JSONArray("[{\"id\":503240,\"name\":\"bob\"},{\"id\":503241,\"name\":\"Tom\"}]"); 

    for (int i = 0; i < array.length(); i++) { 
     JSONObject object = array.getJSONObject(i); 

     Log.d("TAG", "Object #" + i + " id: " + object.getInt("id") + " name: " + object.getString("name")); 
    } 

} catch (JSONException e) { 
    Log.e("TAG", "Cannot parse json :", e); 
} 
관련 문제