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

通过一段时间的学习,我们实现了一个简单的物联网系统,该系统以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();

    }

}

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

                                         

这个页面是第一次实现功能后抓取的,比较激动,所以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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值