世界疫情app柱形图显示

 

 

 

 访问云服务器的mysql实现数据的获取。最后通过柱形图的形式将数据显示在页面上;

遇到的主要困难时对于云服务器的mysql连接本地的navicat之间事情,最后通过网上的各种解决办法完成了相关的内容。具体的实现代码如下:

package com.example.yiqingw;

public class City {
    private String confirm,heal,dead,name;

    public String getHeal() {
        return heal;
    }

    public String getDead() {
        return dead;
    }

    public String getName() {
        return name;
    }

    public String getConfirm() {

        return confirm;
    }

    public void setConfirm(String confirm) {
        this.confirm = confirm;
    }

    public void setHeal(String heal) {
        this.heal = heal;
    }

    public void setDead(String dead) {
        this.dead = dead;
    }

    public void setName(String name) {
        this.name = name;
    }

    public City(String confirm, String heal, String dead, String name) {
        this.confirm = confirm;
        this.heal = heal;
        this.dead = dead;
        this.name = name;
    }
    public City(){}
    @Override
    public String toString() {
        return "City{" +
                "confirm='" + confirm + '\'' +
                ", heal='" + heal + '\'' +
                ", dead='" + dead + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

然后main方法:

package com.example.yiqingw;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.util.EventLogTags;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
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.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.github.mikephil.charting.charts.BarChart;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity{
//android:networkSecurityConfig="@xml/network_security_config"
    private String way="";
    private String key="";
    private String data="";
    private Button chaxun;
    private EditText key1,date1;
    private List<City> cityList = new ArrayList<City>();
    private BarChart barChart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        chaxun=(Button)findViewById(R.id.chaxun);
        key1=(EditText)findViewById(R.id.key);
        date1=(EditText)findViewById(R.id.data);
        barChart=(BarChart)findViewById(R.id.wen1);
        String[] ctype = new String[]{"国家", "省份", "城市"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ctype);  //创建一个数组适配器
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);     //设置下拉列表框的下拉选项样式
        final Spinner spinner = super.findViewById(R.id.spinner);
        spinner.setAdapter(adapter);
        //让第一个数据项已经被选中
        spinner.setSelection(0, true);

        //给Spinner添加事件监听
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            //当选中某一个数据项时触发该方法
            /*
             * parent接收的是被选择的数据项所属的 Spinner对象,
             * view参数接收的是显示被选择的数据项的TextView对象
             * position接收的是被选择的数据项在适配器中的位置
             * id被选择的数据项的行号
             */
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
                //System.out.println(spinner==parent);//true
                //System.out.println(view);
                //String data = adapter.getItem(position);//从适配器中获取被选择的数据项
                //String data = list.get(position);//从集合中获取被选择的数据项
                way = (String)spinner.getItemAtPosition(position);//从spinner中获取被选择的数据
               // Toast.makeText(MainActivity.this, way, Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub
            }
        });
        chaxun.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(way.equals("国家")) {
                    way="getInfoByCountry";
                }
                else if(way.equals("城市")) {
                    way="getInfoByName";
                }
                else if(way.equals("省份")) {
                    way="getInfoByProvince";
                }
                else {
                    way = "";
                }
                key=String.valueOf(key1.getText().toString().trim());
                data=String.valueOf(date1.getText().toString());

                if(key.equals("")||data.equals(""))
                {
                    Toast.makeText(MainActivity.this,"请填写齐全",Toast.LENGTH_SHORT).show();
                }
                else
                {
                    key1.setText("中国");
                    date1.setText("2020-02-18");
                    key="中国";
                    data="2020-03-18";
                    way="getInfoByCountry";

                    String url = "http://117.50.96.227/EpidemicInfo/city/" + way + "/" + key + "/" + data;
                    RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
//                Toast.makeText(getActivity(),url,Toast.LENGTH_SHORT).show();
                    StringRequest stringRequest = new StringRequest(StringRequest.Method.GET,
                            url,
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {
                                    Gson gson = new Gson();
                                    Type cityType = new TypeToken<ArrayList<City>>() {
                                    }.getType();
                                    cityList = gson.fromJson(response, cityType);
                                    Toast.makeText(MainActivity.this, cityList.get(0).getName(),Toast.LENGTH_SHORT).show();
                                    barChart.setNoDataText("暂无内容");
                                    barChart.clear();
                                    showMyView(cityList);
                                }
                            },
                            new Response.ErrorListener() {
                                @Override
                                public void onErrorResponse(VolleyError error) {
                                    Log.e("myTAG", "onErrorResponse: " + error);
                                }
                            });
                    queue.add(stringRequest);
                }
            }
        });

    }
    private void showMyView(List<City> cityList) {
        //chart的设计
        Description description = new Description();
        description.setText("该页面数据仅供参考");
        barChart.setNoDataText("没有数据!");
        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 < cityList.size(); i++) {
            entries_all.add(new BarEntry(i, Float.parseFloat(cityList.get(i).getConfirm())));
            entries_cure.add(new BarEntry(i, Float.parseFloat(cityList.get(i).getHeal())));
            entries_dead.add(new BarEntry(i, Float.parseFloat(cityList.get(i).getDead())));
        }
        List<String> citiesName = new ArrayList<>();
        for (int i = 0; i < cityList.size(); i++) {
            citiesName.add(cityList.get(i).getName());
        }

        //X轴设计
        XAxis xAxis = barChart.getXAxis();
        xAxis.setAxisMinimum(0f);
        xAxis.setAxisMaximum(cityList.size());
        xAxis.setValueFormatter(new IndexAxisValueFormatter(citiesName));
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawAxisLine(false);
        xAxis.setLabelCount(cityList.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);
    }
}

最后的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="疫情柱形图显示"
        android:layout_marginTop="5dp"
        android:textSize="30dp"
        android:textColor="@color/lanse"
        android:layout_marginBottom="20dp"
        android:gravity="center_horizontal"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorAccent"
            android:layout_marginLeft="70dp"
            android:textSize="20dp"
            android:text="请选择类别:"/>
        <Spinner
            android:layout_width="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_height="wrap_content"
            android:id="@+id/spinner"/>
    </LinearLayout>



    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorAccent"
            android:layout_marginLeft="70dp"
            android:textSize="20dp"
            android:text="输入日期:"/>
        <EditText
            android:id="@+id/data"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorPrimaryDark"
            android:layout_marginLeft="10dp"
            android:hint="yyyy-MM-dd"
            android:textSize="20dp"
            android:text=""/>
    </LinearLayout>


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="70dp"
            android:text="输入关键字:"
            android:textColor="@color/colorAccent"
            android:textSize="20dp" />

        <EditText
            android:id="@+id/key"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:hint="请输入"
            android:text=""
            android:textColor="@color/colorPrimaryDark"
            android:textSize="20dp" />

        <Button
            android:id="@+id/chaxun"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="20dp"
            android:background="@color/danlan"
            android:text="查询"
            android:textSize="30dp" />
    </LinearLayout>

    <com.github.mikephil.charting.charts.BarChart
        android:id="@+id/wen1"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:layout_gravity="center_vertical">
    </com.github.mikephil.charting.charts.BarChart>
</LinearLayout>

最后的实现结果:

 

posted @ 2020-03-19 16:33  喜欢爬的孩子  阅读(759)  评论(0编辑  收藏  举报