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包的细节。。。