欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

APP访问服务器抓取页面显示所需数据

程序员文章站 2022-04-30 10:33:34
...

通过一段时间的学习,我们实现了一个简单的物联网系统,该系统以STM32嵌入式微控制器为主控下位机,采集温度传感器数据,通过esp8266 Wi-Fi芯片连接无线局域网访问自己在本机搭建的服务器,并将数据存储在数据库中。同时,用android stdio写一个简单的APP,用来抓取网页内容,实时显示当前环境温度。

前面几篇博客,我们已经完成了大部分的工作,现在只针对安卓端进行说明。

安卓APP用android stdio写的,用的是OKHTT3的网络框架,此前没有学习过java语法,所以刚上手还是比较痛苦的,软件安装,环境搭建都花费很长的时间,一下选取关键代码说明。

第一步,添加网络权限,操作文件:AndroidManifest.xml
 

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

第二步,更改SDK版本,操作文件 app/build.gardle

android6.0之后开始做动态权限处理,这里只是实现简单的功能,所以不使用动态处理权限,改完会出现warning,不用理会

targetSdkVersion 22

第三步,添加依赖,操作文件 app/build.gardle,添加如下代码(也可以通过添加jar包的方式)

implementation 'com.squareup.okhttp3:okhttp:3.14.0' //网络请求框架

如果报错再设置JDK兼容版本


android {

    ......

    //设置编译JDK为1.8

    compileOptions {

        sourceCompatibility JavaVersion.VERSION_1_8

        targetCompatibility JavaVersion.VERSION_1_8

    }

}

MainActivity.xml


package com.example.myapplication;

 

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

 

import android.annotation.SuppressLint;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

 

import java.io.IOException;

 

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.Response;

 

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

 

    private Button button;

    private TextView textView;

    private OkHttpClient client = new OkHttpClient();

    @SuppressLint("HandlerLeak")

    private Handler handler = new Handler(){

    @Override

    public void handleMessage(@NonNull Message msg) {

        super.handleMessage(msg);

        textView.setText((String) msg.obj);

    }

};

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        button = findViewById(R.id.button);

         textView = findViewById(R.id.textView);

 

        button.setOnClickListener(this);

 

    }

 

    @Override

    public void onClick(View v) {

        getDataFrom();

    }

 

    private void getDataFrom() {

        new Thread(){

            @Override

            public void run() {

                super.run();

                try {

                    String result = get("http://192.168.43.95/temperature/display.php");

                    Log.e("TAG", result);

                    Message msg = Message.obtain();

 

                    msg.obj = result;

                    handler.sendMessage(msg);

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }.start();

 

    }

 

    private String get(String url) throws IOException{

        Request request = new Request.Builder()

                .url(url)

                .build();

 

        Response response = client.newCall(request).execute();

        return response.body().string();

    }

}

编译运行,进行真机测试,点击按钮,发现已经可以抓取网页内容

                                          APP访问服务器抓取页面显示所需数据

这个页面是第一次实现功能后抓取的,比较激动,所以PHP端没有完善,但主要数据已经有了,因为博主并不打算从事app和前端开发的工作,所以PHP和android都写的比较难看,本来APP还需要加一个自动刷新以及控制单片机的,但不打算继续研究了,只是为了项目的完整性,以后应该也不会接触这些。

至此整个物联网小项目已经完成了,有很多的不足,也有很多的缺陷,但从头到尾自己一个人也收获了很多东西,中间大起大落,每天都像在坐过山车,因为几乎都是陌生的东西。
————————————————
版权声明:本文为CSDN博主「_wangpan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangpan0330/article/details/102551660

https://blog.csdn.net/wangpan0330/article/details/102551660

相关标签: