世界疫情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>

最后的實現結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM