安卓大作业开发02--体温记录

烈酒焚心 提交于 2020-02-11 22:48:15

简单学习了一下Jsoup,但是发现爬不到所需的数据,偶然中发现了论坛大佬发布的API,于是使用API来获取数据。由于目前还不会制作表格,所以只对河北省的信息进行了可视化管理。

 

1、数据的获取

1、实体类的创建

根据API所返回的数据,设计如下实体类:

package com.example.fightvirus;
​
import java.util.List;
​
public class MyJson {
    private String provinceName;
    private String provinceShortName;
    private int confirmedCount;
    private int suspectedCount;
    private int curedCount;
    private int deadCount;
    private String comment;
    private int locationId;
    private List<City> cities;
​
    @Override
    public String toString() {
        return "MyJson{" +
                "provinceName='" + provinceName + '\'' +
                ", provinceShortName='" + provinceShortName + '\'' +
                ", confirmedCount=" + confirmedCount +
                ", suspectedCount=" + suspectedCount +
                ", curedCount=" + curedCount +
                ", deadCount=" + deadCount +
                ", comment='" + comment + '\'' +
                ", locationId=" + locationId +
                ", cities=" + cities +
                '}';
    }
​
    public String getProvinceName() {
        return provinceName;
    }
​
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
​
    public String getProvinceShortName() {
        return provinceShortName;
    }
​
    public void setProvinceShortName(String provinceShortName) {
        this.provinceShortName = provinceShortName;
    }
​
    public int getConfirmedCount() {
        return confirmedCount;
    }
​
    public void setConfirmedCount(int confirmedCount) {
        this.confirmedCount = confirmedCount;
    }
​
    public int getSuspectedCount() {
        return suspectedCount;
    }
​
    public void setSuspectedCount(int suspectedCount) {
        this.suspectedCount = suspectedCount;
    }
​
    public int getCuredCount() {
        return curedCount;
    }
​
    public void setCuredCount(int curedCount) {
        this.curedCount = curedCount;
    }
​
    public int getDeadCount() {
        return deadCount;
    }
​
    public void setDeadCount(int deadCount) {
        this.deadCount = deadCount;
    }
​
    public String getComment() {
        return comment;
    }
​
    public void setComment(String comment) {
        this.comment = comment;
    }
​
    public int getLocationId() {
        return locationId;
    }
​
    public void setLocationId(int locationId) {
        this.locationId = locationId;
    }
​
    public List<City> getCities() {
        return cities;
    }
​
    public void setCities(List<City> cities) {
        this.cities = cities;
    }
}
​
class City{
    private String cityName;
    private int confirmedCount;
    private int suspectedCount;
    private int curedCount;
    private int deadCount;
    private int locationId;
​
    @Override
    public String toString() {
        return "City{" +
                "cityName='" + cityName + '\'' +
                ", confirmedCount=" + confirmedCount +
                ", suspectedCount=" + suspectedCount +
                ", curedCount=" + curedCount +
                ", deadCount=" + deadCount +
                ", locationId=" + locationId +
                '}';
    }
​
    public String getCityName() {
        return cityName;
    }
​
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
​
    public int getConfirmedCount() {
        return confirmedCount;
    }
​
    public void setConfirmedCount(int confirmedCount) {
        this.confirmedCount = confirmedCount;
    }
​
    public int getSuspectedCount() {
        return suspectedCount;
    }
​
    public void setSuspectedCount(int suspectedCount) {
        this.suspectedCount = suspectedCount;
    }
​
    public int getCuredCount() {
        return curedCount;
    }
​
    public void setCuredCount(int curedCount) {
        this.curedCount = curedCount;
    }
​
    public int getDeadCount() {
        return deadCount;
    }
​
    public void setDeadCount(int deadCount) {
        this.deadCount = deadCount;
    }
​
    public int getLocationId() {
        return locationId;
    }
​
    public void setLocationId(int locationId) {
        this.locationId = locationId;
    }
}

 

2、volley

使用volley来获取数据,再使用Gson来对数据进行反序列化。

  • 依赖:

    app中

    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'com.android.volley:volley:1.1.1'

     

    project中

    allprojects {
        repositories {
            maven { url 'https://jitpack.io' }
        }
    }

     

  • 简单使用

    RequestQueue queue = Volley.newRequestQueue(getActivity());
            StringRequest stringRequest = new StringRequest(StringRequest.Method.GET,
                    "URL(API接口)",
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Gson gson = new Gson();
                            Type userListType = new TypeToken<ArrayList<MyJson>>(){}.getType();
                            List<MyJson> myJsonList =gson.fromJson(response,userListType);
                            myJson = myJsonList.get(0);
                            initMyView(myJson);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("myTAG", "onErrorResponse: " + error);
                }
            });
            queue.add(stringRequest);

     

2、页面的布局

  • 上方展示确诊人数、治愈人数、死亡人数。

  • 下方将各市的信息通过柱状图的形式展示出来。

3、逻辑代码

package com.example.fightvirus;
​
​
import android.graphics.Color;
import android.os.Bundle;
​
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
​
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
​
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.formatter.IndexAxisValueFormatter;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
​
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
​
​
/**
 * A simple {@link Fragment} subclass.
 */
public class HomeChatFragment extends Fragment {
    private MyJson myJson;
    private TextView confirmedCount, curedCount, deadCount;
    BarChart barChart;
​
    public HomeChatFragment() {
        // Required empty public constructor
    }
​
​
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View inflate = inflater.inflate(R.layout.fragment_home_chat, container, false);
        barChart = inflate.findViewById(R.id.barChart);
        confirmedCount = inflate.findViewById(R.id.confirmedCount);
        curedCount = inflate.findViewById(R.id.curedCount);
        deadCount = inflate.findViewById(R.id.deadCount);
        return inflate;
    }
​
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
​
        RequestQueue queue = Volley.newRequestQueue(getActivity());
        StringRequest stringRequest = new StringRequest(StringRequest.Method.GET,
                "http://49.232.173.220:3001/data/getAreaStat/河北",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Gson gson = new Gson();
                        Type userListType = new TypeToken<ArrayList<MyJson>>() {
                        }.getType();
                        List<MyJson> myJsonList = gson.fromJson(response, userListType);
                        myJson = myJsonList.get(0);
                        initMyView(myJson);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("myTAG", "onErrorResponse: " + error);
            }
        });
        queue.add(stringRequest);
​
    }
​
    private void initMyView(MyJson myJson) {
        confirmedCount.setText(String.valueOf(myJson.getConfirmedCount()));
        curedCount.setText(String.valueOf(myJson.getCuredCount()));
        deadCount.setText(String.valueOf(myJson.getDeadCount()));
        List<City> cities = myJson.getCities();
        //chart的设计
        Description description = new Description();
        description.setText("数据来源:丁香医生");
        barChart.setDescription(description);
        barChart.setDrawBorders(false);
        barChart.setBackgroundColor(Color.WHITE);
        barChart.setDrawGridBackground(false);
        barChart.setDrawBarShadow(false);
        barChart.setHighlightFullBarEnabled(false);
        barChart.setDragEnabled(true);
        barChart.setNoDataText("正在加载数据...");
​
​
        //X轴数据
        ArrayList<BarEntry> entries_all = new ArrayList<>();
        ArrayList<BarEntry> entries_cure = new ArrayList<>();
        ArrayList<BarEntry> entries_dead = new ArrayList<>();
        for (int i = 0; i < cities.size(); i++) {
            entries_all.add(new BarEntry(i, cities.get(i).getConfirmedCount()));
            entries_cure.add(new BarEntry(i, cities.get(i).getCuredCount()));
            entries_dead.add(new BarEntry(i, cities.get(i).getDeadCount()));
        }
        List<String> citiesName = new ArrayList<>();
        for (int i = 0; i < cities.size(); i++) {
            citiesName.add(cities.get(i).getCityName());
        }
​
        //X轴设计
        XAxis xAxis = barChart.getXAxis();
        xAxis.setAxisMinimum(0f);
        xAxis.setAxisMaximum(cities.size());
        xAxis.setValueFormatter(new IndexAxisValueFormatter(citiesName));
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawAxisLine(false);
        xAxis.setLabelCount(cities.size());
        xAxis.setCenterAxisLabels(true);
​
        //Y轴的设计
        YAxis rightY = barChart.getAxisRight();
        YAxis leftY = barChart.getAxisLeft();
        rightY.setEnabled(false);
        leftY.setEnabled(false);
​
        BarDataSet barDataSet_all = new BarDataSet(entries_all, "确诊人数");
        barDataSet_all.setColor(Color.RED);
​
        BarDataSet barDataSet_cure = new BarDataSet(entries_cure, "治愈人数");
        barDataSet_cure.setColor(Color.GREEN);
​
        BarDataSet barDataSet_dead = new BarDataSet(entries_dead, "死亡人数");
        barDataSet_dead.setColor(Color.GRAY);
​
        BarData barData = new BarData();
        barData.addDataSet(barDataSet_all);
        barData.addDataSet(barDataSet_cure);
        barData.addDataSet(barDataSet_dead);
​
        barData.setBarWidth(0.3f);
        barData.groupBars(0f, 0.1f, 0f);
        barChart.setData(barData);
    }
​
}

 

4、展示效果

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!