본문 바로가기
Android Studio

[Android Studio] Json 데이터 파싱하기(+JsonArray를 RecyclerView로 처리하기)

by coding_su 2023. 2. 3.

📝제이슨 데이터 파싱하기

JSON 데이터 파싱하기 = 제이슨으로 받아온 데이터를 꺼내와 사용하기

※ try 안에서 코드를 입력한다

 

+ 받아오는 정보가 오브젝트 { } 일때

JsonObjectRequest request = new JsonObjectRequest(
        Request.Method.GET, URL + "/posts/1", null,

        // 성공했을때 받아온 데이터 처리하기
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                // response에 데이터가 있으니 이 데이터를 Parsing 한다
                try {
                    int userId = response.getInt("userId");
                    int id = response.getInt("id");
                    String title = response.getString("title");
                    String body = response.getString("body");

                    // 문제가 없다면 화면에 셋팅
                    // 화면 셋팅을 try 밖에서 할 경우 변수처리도 try 밖에서 해야한다
                    txtUserId.setText(userId+"");
                    txtId.setText(id+"");
                    txtTitle.setText(title);
                    txtBody.setText(body);

                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(MainActivity.this,"파싱에러",Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        },
        // 에러났을때 처리
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        }
);
queue.add(request);

 

+ 받아오는 정보가 어레이 리스트[] 일때

RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
JsonArrayRequest request2 = new JsonArrayRequest(
        Request.Method.GET, URL + "/posts", null,
        new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                // 데이터가 잘 왔는지 확인
                Log.i("NETWORK_APP", response.toString());
                // response에 데이터가 있으니 이 데이터를 Parsing 한다
                try {
                    // 리스트의 첫번째 데이터 가져오기
                    JSONObject data = response.getJSONObject(0);
                    
                    // 화면 셋팅
                    int userId = data.getInt("userId");
                    int id = data.getInt("id");
                    String title = data.getString("title");
                    String body = data.getString("body");

                    txtUserId.setText(userId+"");
                    txtId.setText(id+"");
                    txtTitle.setText(title);
                    txtBody.setText(body);

                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(MainActivity.this,"파싱에러",Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        },
        // 에러났을때 처리
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        }
);
queue.add(request2);

 

+ 받아오는 정보가 오브젝트안의 어레이 리스트 {[ ]} 일때 (반복문을 사용해준다)

public class MainActivity extends AppCompatActivity {

    public final String URL = "주소";
    RecyclerView recyclerView;
    AlbumAdapter adapter;
    ArrayList<Album> albumArrayList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        JsonObjectRequest request = new JsonObjectRequest(
                Request.Method.GET, URL + "/photos.json", null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray responseData = response.getJSONArray("data");
                            for ( int i = 0; i < responseData.length(); i++ ) {
                                JSONObject data = responseData.getJSONObject(i);

                                Album album = new Album(data.getInt("albumId"), data.getInt("id"), data.getString("title"), data.getString("url"), data.getString("thumbnailUrl"));
                                albumArrayList.add(album);
                            }

                        } catch (JSONException e) {
                            Toast.makeText(MainActivity.this,"에러발생",Toast.LENGTH_SHORT).show();
                        }
                        
                        // 어댑터 연결해서 리사이클러뷰로 나타내기
                        adapter = new AlbumAdapter(MainActivity.this, albumArrayList);
                        recyclerView.setAdapter(adapter);

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this,"서버에러발생",Toast.LENGTH_SHORT).show();
                    }
                }
        );
        queue.add(request);
    }
}

댓글