zoukankan      html  css  js  c++  java
  • 第五周总结

      本周实现爬取的数据通过APP进行展示,需要用到的东西:web结构(servlet),Android,服务器,使用python爬取数据

      服务器搭建我选择的是阿里云的云服务器,web和python方面之前已经学习过了,这里介绍Android上我学习的知识:HttpURLConnection

      1 package com.example.yiqing;
      2 
      3 import androidx.appcompat.app.AppCompatActivity;
      4 
      5 import android.content.Intent;
      6 import android.os.Bundle;
      7 import android.os.Handler;
      8 import android.os.Message;
      9 import android.text.method.ScrollingMovementMethod;
     10 import android.view.View;
     11 import android.widget.Button;
     12 import android.widget.TextView;
     13 
     14 import org.json.JSONArray;
     15 import org.json.JSONObject;
     16 
     17 import java.io.BufferedReader;
     18 import java.io.DataOutputStream;
     19 import java.io.IOException;
     20 import java.io.InputStreamReader;
     21 import java.io.OutputStream;
     22 import java.net.HttpURLConnection;
     23 import java.net.URL;
     24 import java.net.URLEncoder;
     25 
     26 public class Watch extends AppCompatActivity {
     27     private TextView show;
     28     private Button see;
     29 
     30     //利用Handler实现更改页面
     31     private Handler handler=new Handler(){
     32         public void handleMessage(android.os.Message msg){
     33             Bundle bundle=new Bundle();
     34             bundle=msg.getData();
     35             String ans=bundle.getString("result");
     36             if(ans!=null){
     37                 show.setText(ans);
     38             }
     39         }
     40     };
     41     @Override
     42     protected void onCreate(Bundle savedInstanceState) {
     43         super.onCreate(savedInstanceState);
     44         setContentView(R.layout.activity_watch);
     45         show=(TextView)findViewById(R.id.show);
     46         show.setMovementMethod(ScrollingMovementMethod.getInstance());
     47         see=(Button)findViewById(R.id.see);
     48 
     49         see.setOnClickListener(new View.OnClickListener(){
     50             @Override
     51             public void onClick(View view){
     52                 //写下要访问的servlet路径
     53                 final String path="http://47.98.228.220:8080/PaQu/ChartServlet";
     54                 //使用HttpURLConnection需要子线程
     55                 new Thread(new Runnable() {
     56                     @Override
     57                     public void run() {
     58                         Intent intentdata=getIntent();
     59                         //从上一个页面拿到输入的日期数据
     60                         String date=intentdata.getStringExtra("date");
     61                         String msg="";
     62                         HttpURLConnection conn=null;
     63                         try{
     64                             URL url=new URL(path);
     65                             conn=(HttpURLConnection)url.openConnection();
     66                             //设置post格式,这里格式要跟servlet里一致
     67                             conn.setRequestMethod("POST");
     68                             //设置超时时间
     69                             conn.setConnectTimeout(5000);
     70                             conn.setReadTimeout(5000);
     71                             //post格式不能用缓存
     72                             conn.setUseCaches(false);
     73                             conn.setDoInput(true);
     74                             String data="date="+date;
     75                             //将传给servlet的数据写入传输
     76                             OutputStream out=conn.getOutputStream();
     77                             //这里注意要更改传输数据的格式,getBytes()
     78                             out.write(data.getBytes());
     79                             out.flush();
     80                             out.close();
     81                             conn.connect();
     82 
     83                             //这里开始接收从servlet里传回来的数据
     84                             BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
     85                             String line=null;
     86                             //传回来的是一个JSONArray类型的数据,需要对其进行解析
     87                             if((line=reader.readLine())!=null){
     88                                 //开始解析
     89                                 JSONArray jsonArray=new JSONArray(line);
     90                                 for(int i=0;i<jsonArray.length();i++){
     91                                     JSONObject jsonObject=jsonArray.getJSONObject(i);
     92                                     String province=jsonObject.getString("Province");
     93                                     String confirmed=jsonObject.getString("Confirmed");
     94                                     String cured=jsonObject.getString("Cured");
     95                                     String dead=jsonObject.getString("Dead");
     96                                     msg=msg+"省份:"+province+"     确诊:"+confirmed+"     治愈:"+cured+"     死亡:"+dead+"
    ";
     97                                 }
     98                             }
     99                             //将信息使用bundle封装,传给handler
    100                             Bundle bundle=new Bundle();
    101                             bundle.putString("result",msg);
    102                             Message msg1=new Message();
    103                             msg1.setData(bundle);
    104                             handler.sendMessage(msg1);
    105                             conn.disconnect();
    106                         }catch(Exception e){
    107                             e.printStackTrace();
    108                         }
    109                     }
    110                 }).start();
    111             }
    112         });
    113     }
    114 
    115 }

    HttpURLConnection能够连接到servlet,需要先给Android设置网络连接权限。爬取到数据是Servlet回传的数据,这里可以看到我servlet回调的是json数据。最后就是更改页面控件显示。因为主线程上不允许调用页面更改,因此需要handle另起线程实现。

  • 相关阅读:
    JSP自定义标签_用简单标签控制标签体执行10次
    JSP自定义标签_用简单标签实现控制标签体是否执行
    eclipse 使用lombok 精简java bean
    转 :关于springmvc使用拦截器
    转: spring静态注入
    spring 4.0+quartz2.2 实现持久化
    排除maven jar冲突 maven tomcat插件启动报错 filter转换异常
    转 Quartz将Job持久化所需表的说明
    转 maven jetty 插件
    ORA-14300: 分区关键字映射到超出允许的最大分区数的分区
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/13059237.html
Copyright © 2011-2022 走看看