移动端疫情展示

一、要求

1、要求开发一款移动端的全世界疫情实时查询系统。

2、要求将前两周的项目合并为一个完整的项目。 采用统一的数据库。(建议MySQL数据库)

3、实现从数据采集、数据存储、数据查询(WEB端和移动端)一体全世界实时疫情查询系统。

4、以本机数据库为服务器端,web端和移动端连接远程数据库实现数据共享,要求数据库表格式统一化。

5、查询显示当前最新时间的数据,可以查询任一时间任一地点的数据。该系统要求在服务器端发布,可以通过IP地址访问。

二、设计思路

1、数据准备,使用python从网上爬取疫情各地的数据,并存入mysql数据库

2、数据展示,遇到了很大的难题:(Android获取数据时,连不上数据库)按照老师要求我的解决方法是从Android发送http请求到web端web端在从数据库获取数据,以此来做到web端和我Android端公用一套数据。

 3、使用volley的stringrequest向web请求数据(json)

 4、使用Gson进行数据转换。

 5、使用MPAndroidChart的柱状图来进行数据可视化

三、代码

数据爬取:

import requests
import json
from pymysql import *
import requests
from retrying import retry
headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36"
            ,"Referer": "https://wp.m.163.com/163/page/news/virus_report/index.html?_nw_=1&_anw_=1"}


def _parse_url(url):
    response = requests.get(url,headers=headers,timeout=3) #3秒之后返回
    return response.content.decode()


def parse_url(url):
    try:
        html_str = _parse_url(url)
    except:
        html_str = None
    return html_str


class yiqing:
    f = 0

    url="https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=316765429316"

    def getContent_list(self,html_str):
        dict_data = json.loads(html_str)
        #各省的数据
        content_list = dict_data["data"]
        
        return content_list

    
    def saveContent_list(self,i):
        # 打开数据库连接(ip/数据库用户名/登录密码/数据库名)
        con = connect("localhost", "root", "root", "text")
        # 使用 cursor() 方法创建一个游标对象 cursor
        cursors = con.cursor()
        # 使用 execute()  方法执行 SQL 查询 返回的是你影响的行数
        if self.f ==0 :
            cursors.execute("delete from world")
            self.f = self.f+1
        row = cursors.execute("insert into world values(%s,%s,%s,%s,%s,%s,%s,%s)",
                              (i.get('id'),i.get('name'),i.get('total').get('confirm'),
                               i.get('total').get('suspect'),i.get('total').get('heal'),
                               i.get('total').get('dead'),i.get('total').get('severe'),
                               i.get('lastUpdateTime')))
        
        con.commit()#提交事务
        con.close()# 关闭数据库连接

        
    def run(self): #实现主要逻辑
        #请求数据
        html_str = parse_url(self.url)
        #获取数据
        content_list = self.getContent_list(html_str)
        values = content_list["areaTree"]
        for i in values:
            self.saveContent_list(i)

if __name__ == '__main__':
    yq = yiqing()
    yq.run()
    print('爬取,存储成功!!')
package com.me.http;

import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.formatter.ValueFormatter;

import java.text.DecimalFormat;

public class MyValueFormatter extends ValueFormatter{
    private final DecimalFormat mFormat;
    private String suffix;
    private String [] str;

    public MyValueFormatter(String suffix,String [] str) {
        mFormat = new DecimalFormat("0000");
        this.suffix = suffix;
        this.str = str;
    }

    @Override
    public String getFormattedValue(float value) {
        return mFormat.format(value) + suffix;
    }

    @Override
    public String getAxisLabel(float value, AxisBase axis) {
        if (axis instanceof XAxis) {
            return str[(int)value];
        } else if (value > 0) {
            return mFormat.format(value) + suffix;
        } else {
            return mFormat.format(value);
        }
    }
}
viewModel = ViewModelProviders.of(requireActivity()).get(ViewModel.class);
        list = viewModel.getList();
        for (int i = 0; i < 7; i++) {
            str[i] = list.get(i).getName();
        }
ArrayList<BarEntry> values = new ArrayList<>();
        for (int i = 0; i < 7; i++) {
            BarEntry barEntry = new BarEntry(i,Float.valueOf(list.get(i).getConfirm()));
            values.add(barEntry);
        }
ValueFormatter custom = new MyValueFormatter(" 1",str);
xAxis.setValueFormatter(custom);
原文地址:https://www.cnblogs.com/charles-s/p/13088687.html