zoukankan      html  css  js  c++  java
  • 疫情APP

    MainActivity.java//主函数

    package com.example.application;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.icu.lang.UCharacter;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Spinner;
    import android.widget.TextView;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        private Button bt_send;
        private EditText et_content;
        private static final int TEST_USER_SELECT = 1;
        private String content;
        private Spinner conditionSpinner;
        private String condition;
        private ListView lv;
        String[] strs = new String[]{};
        @SuppressLint("HandlerLeak")
        private Handler mHandler = new Handler(){
            @Override
            public void handleMessage(Message msg){
    
                switch(msg.what){
                    case TEST_USER_SELECT:
                        String s = (String)msg.obj;
                        strs = s.split("  ");
                        lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,strs));
                        break;
                }
            }
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bt_send = findViewById(R.id.bt_send);
            et_content = findViewById(R.id.et_content);
            et_content.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                }
                @Override
                public void afterTextChanged(Editable s) {
                    content = s.toString();
                }
            });
            conditionSpinner = findViewById(R.id.condition);
            final String [] data = {"国家","时间"};
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,data);
            conditionSpinner.setAdapter(adapter);
            conditionSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
    
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    //取得选中的值
                    condition = data[position];
                    //设置显示当前选择的项
                    parent.setVisibility(View.VISIBLE);
                }
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
    
                }
            });
            System.out.println(condition);
            lv = findViewById(R.id.lv);
    
        }
        @Override
        protected void onStart(){
            super.onStart();
            bt_send.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //执行查询操作
                    //连接数据库进行操作需要在主线程操作
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            //调用数据库帮助类中的方法取数据
                            List<Data> list = DB.searchDataByCountry(condition,content);
                            Message message = mHandler.obtainMessage();
                            String s = "";
                            for(int i=0;i<list.size();i++){
                                s += "时间:"+list.get(i).getLastUpdateTime()+"  ";
                                s += list.get(i).getCountryname()+"确诊人数为:  ";
                                s += list.get(i).getConfirmed()+"  ";
                            }
                            message.what = TEST_USER_SELECT;
                            message.obj = s;
                            mHandler.sendMessage(message);
                        }
                    }).start();
                }
            });
        }
    }

    Data.java//变量

    package com.example.application;
    
    public class Data {
        private int id;
        private String countryname;
        private String confirmed;
        private String suspected;
        private String dead;
        private String healed;
        private String lastUpdateTime;
    
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getCountryname() {
            return countryname;
        }
    
        public void setCountryname(String countryname) {
            this.countryname = countryname;
        }
    
        public String getConfirmed() {
            return confirmed;
        }
    
        public void setConfirmed(String confirmed) {
            this.confirmed = confirmed;
        }
    
        public String getSuspected() {
            return suspected;
        }
    
        public void setSuspected(String suspected) {
            this.suspected = suspected;
        }
    
        public String getDead() {
            return dead;
        }
    
        public void setDead(String dead) {
            this.dead = dead;
        }
    
        public String getHealed() {
            return healed;
        }
    
        public void setHealed(String healed) {
            this.healed = healed;
        }
    
        public String getLastUpdateTime() {
            return lastUpdateTime;
        }
    
        public void setLastUpdateTime(String lastUpdateTime) {
            this.lastUpdateTime = lastUpdateTime;
        }
    }

    DB.java//连接数据库

    package com.example.application;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    public class DB {
        private static String driver = "com.mysql.jdbc.Driver";
        private static String url = "jdbc:mysql://192.168.0.104:3306/yiqing1?characterEncoding=utf-8";
        private static String user = "root";//用户名
        private static String password = "123456";//密码
    
        public static Connection getConn(){
            Connection conn = null;
            try {
                Class.forName(driver);
                conn = (Connection) DriverManager.getConnection(url,user,password);//获取连接
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
        public static List<Data>  searchDataByCountry(String condition,String country_name){
            List<Data> list = new ArrayList<>();
            Connection connection = getConn();
            String sql = "";
            //System.out.println(condition);
            if(condition.equals("国家")){
                sql = "select * from worlddata where countryname like ?";
            }
            if(condition.equals("时间")){
                sql = "select * from worlddata where lastUpdateTime like ?";
            }
            System.out.println(country_name);
            if(connection !=null){
                try {
                    PreparedStatement ps = connection.prepareStatement(sql);
                    if(ps!=null){
                        ps.setString(1,"%"+country_name+"%");
                        ResultSet rs = ps.executeQuery();
                        if(rs!=null){
                            while(rs.next()){
                                Data data = new Data();
                                data.setId(rs.getInt("id"));
                                data.setCountryname(rs.getString("countryname"));
                                data.setConfirmed(rs.getString("confirmed"));
                                data.setSuspected(rs.getString("suspected"));
                                data.setDead(rs.getString("dead"));
                                data.setHealed(rs.getString("healed"));
                                data.setLastUpdateTime(rs.getString("lastUpdateTime"));
                                list.add(data);
                            }
                            connection.close();
                            ps.close();
                            return list;
                        }else{
                            return null;
                        }
                    }else{
                        return null;
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                    return null;
                }
            }else{
                return null;
            }
    
        }
    }

    activity_main.xml//界面

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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">
    
        <Spinner
            android:id="@+id/condition"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <EditText
            android:id="@+id/et_content"
            android:layout_width="180dp"
            android:layout_height="40dp"
            android:layout_toRightOf="@+id/condition"
            />
        <Button
            android:id="@+id/bt_send"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="查询"
            android:layout_toRightOf="@+id/et_content"
            />
    
        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="50dp"
            />
    
    </RelativeLayout>

    AndroidManifest.xml//需要的网络权限

    <uses-permission android:name="android.permission.INTERNET" />

    world.py//python文件爬取数据

    import pymysql
    import requests
    import json
    # 放入要爬的url
    url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
    # 设置header做一个防爬机制
    header = {"user-agent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Mobile Safari/537.36"}
    # 获取response的json
    response = requests.get(url, headers=header)
    # 取得数据词典
    data = json.loads(response.content.decode())
    data_str = data['data']
    data_json = json.loads(data_str)
    # 连接数据库
    db = pymysql.connect(host = 'localhost', port=3306, user='root', password='123456', db='yiqing1', charset='utf8')
    #使用cursor方法生成一个游标
    cursor = db.cursor()
    confirmed_total = 0
    suspected_total = 0
    dead_total = 0
    healed_total = 0
    # 更新时间
    lastUpdateTime = data_json['lastUpdateTime']
    # 取出各个国家的数据
    for worldData in data_json['areaTree']:
        countryName = worldData['name']
        confirmed = worldData['total']['confirm']
        confirmed_total += confirmed
        suspected = worldData['total']['suspect']
        suspected_total += suspected
        dead = worldData['total']['dead']
        dead_total += dead
        healed = worldData['total']['heal']
        healed_total += healed
        sql = "insert into worlddata(id,countryname,confirmed,suspected,dead,healed,lastupdateTime) values({},'{}','{}','{}','{}', '{}','{}')".format(0, countryName, confirmed, suspected, dead, healed, lastUpdateTime)
        cursor.execute(sql)
        db.commit()
    sql_total = "insert into worlddata(id,countryname,confirmed,suspected,dead,healed,lastupdateTime) values({},'{}','{}','{}','{}', '{}','{}')".format(0, 0, confirmed_total, suspected_total, dead_total, healed_total, lastUpdateTime)
    cursor.execute(sql_total)
    db.commit()

    需要注意的就是数据库权限和导入jar包的细节。。。

  • 相关阅读:
    Atitit.数据库存储引擎的原理与attilax 总结
    Atitit.数据库存储引擎的原理与attilax 总结
    atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29
    atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29
    atitit.项目设计模式---ioc attilax总结v4 q11
    atitit.项目设计模式---ioc attilax总结v4 q11
    Atitit.attilax的 case list 项目经验 案例列表
    Atitit.attilax的 case list 项目经验 案例列表
    Atitit.python web环境的配置 attilax 总结
    Atitit.python web环境的配置 attilax 总结
  • 原文地址:https://www.cnblogs.com/fengjingfei/p/12542852.html
Copyright © 2011-2022 走看看