한 묶음의 데이터를 보여줄 레이아웃을 만든다.
<?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;
}
}