Android

네트워크로부터 받은 Json 데이터에서, json 의 array 를 RecyclerView 로 처리

yugyeong 2023. 2. 3. 16:49

json 에서 array 를 RecyclerView 로 처리하기 위해서는 반복문을 이용하여서 데이터를 가져와야 한다.

 

 

코드

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    PostAdapter adapter;
    ArrayList<Post> postList = new ArrayList<>();
    final String URL = "https://jsonplaceholder.typicode.com";


    @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));

        // 리사이클러뷰 밑에 선 생기게
        DividerItemDecoration dividerItemDecoration =
                new DividerItemDecoration(this,
                        new LinearLayoutManager(this).getOrientation());
        recyclerView.addItemDecoration(dividerItemDecoration);

        // 데이터를 네트워크에서 받아온다.
        // Volley 로 네트워크 통신한다.
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

        // request 만든다.
        JsonArrayRequest request = new JsonArrayRequest(
                Request.Method.GET,
                URL + "/posts",
                null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        for (int i=0; i<response.length(); i++){

                            try {
                                JSONObject data = response.getJSONObject(i);

//                                Post post = new Post();
//                                post.userId = data.getInt("userId");
//                                post.id = data.getInt("id");
//                                post.title = data.getInt("title");
//                                post.body = data.getInt("body");

                                Post post = new Post(data.getInt("userId"),
                                        data.getInt("id"),
                                        data.getString("title"),
                                        data.getString("body"));

                                postList.add(post);

                            } catch (JSONException e) {
                                return;
                            }
                        }

                        // 리사이클러뷰에 보이게 한다.
                        // 어댑터를 만든다.
                        adapter = new PostAdapter(MainActivity.this, postList);
                        // 어댑터를 리사이클러뷰에 셋팅!
                        recyclerView.setAdapter(adapter);

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                }

        );

        queue.add(request);

    }
}