Android Recycleview HTTP

한 묶음의 데이터를 보여줄 레이아웃을 만든다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/item_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="TextView" />
    </LinearLayout>
</LinearLayout>

DTO

데이터를 묶어줄 클래스를 만든다


public class DTO {
    private  String date_joine;
    private int pk = 0;
    private double temperature = 0;
    private double fahrenheit = 0;
    private double humidity = 0;
    private double moisture = 0;
    private double micro_dust = 0;
    public DTO (){}
    public int getPk() {
        return pk;
    }
    public void setPk(int pk) {
        this.pk = pk;
    }
    public double getTemperature() {
        return temperature;
    }
    public void setTemperature(double temperature) {
        this.temperature = temperature;
    }
    public double getFahrenheit() {
        return fahrenheit;
    }
    public void setFahrenheit(double fahrenheit) {
        this.fahrenheit = fahrenheit;
    }
    public double getHumidity() {
        return humidity;
    }
    public void setHumidity(double humidity) {
        this.humidity = humidity;
    }
    public double getMoisture() {
        return moisture;
    }
    public void setMoisture(double moisture) {
        this.moisture = moisture;
    }
    public double getMicro_dust() {
        return micro_dust;
    }
    public void setMicro_dust(double micro_dust) {
        this.micro_dust = micro_dust;
    }
    public String getDate_joine() {
        return date_joine;
    }
    public void setDate_joine(String date_joine) {
        this.date_joine = date_joine;
    }
}

DAO

데이터와 보여줄 레이아웃을 연결시켜주는 어뎁터를 생성한다.


public class DAO extends RecyclerView.Adapter<DAO.Holder> {
    ArrayList<DTO> list;
    public DAO(ArrayList<DTO> list) {
        this.list = list;
    }
    @NonNull
    @Override
    public DAO.Holder  onCreateViewHolder(@NonNull  ViewGroup parent, int viewType) {
        Context context = parent.getContext();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.item, parent, false);
        DAO.Holder h = new DAO.Holder(view);
        return h;
    }
    @Override
    public void onBindViewHolder(@NonNull @NotNull Holder holder, int position) {
        DTO dto = list.get(position);
        holder.tvPk.setText(dto.getPk()+"");
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
   public class Holder extends RecyclerView.ViewHolder {
        TextView tvPk;
        public Holder(@NonNull View itemView) {
            super(itemView);
            tvPk = itemView.findViewById(R.id.item_id);
        }
    }
}

서버로부터 데이터를받아 json parsing하여 RecycleView에 출력해준다.


public class TESTList extends Fragment {
    private String serverUrl = "주소";
    ViewGroup  view;
    ArrayList<SensorDTO> array;
    DAO dao;
    private RecyclerView recycleview;
    public TESTList() {
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view = (ViewGroup) inflater.inflate(R.layout.fragment_sensor_list, container, false);
        recycleview = view.findViewById(R.id.recycleview);
        recycleview.setHasFixedSize(true);
        LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        llm.setOrientation(LinearLayoutManager.VERTICAL);
        recycleview.setLayoutManager(llm);
        post(serverUrl, null, new okhttp3.Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
            }
            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                if (response.isSuccessful()) {
                    String responseStr = response.body().string();
                    array = new ArrayList<SensorDTO>();
                    try {
                        JSONArray jsonArray = new JSONArray(responseStr);
                        for(int i =0;i<jsonArray.length();i++)
                        {
                            DTO dto = new DTO();
                            JSONObject item =   jsonArray.getJSONObject(i);
                            dto.setPk(item.getInt("pk"));
                            array.add(dto);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    dao = new SensorDAO(array);
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            recycleview.setAdapter(dao);
                        }
                    });
                    // Do what you want to do with the response.
                } else {
                    // Request not successful
                }
            }
        });
        return view;
    }
    OkHttpClient client = new OkHttpClient();
    Call post(String url, String json, okhttp3.Callback callback) {
        //  RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                //        .post(body)
                .build();
        Call call = client.newCall(request);
        call.enqueue(callback);
        return call;
    }
}

Leave a Comment