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还需要加一个自动刷新以及控制单片机的,但不打算继续研究了,只是为了项目的完整性,以后应该也不会接触这些。

至此整个物联网小项目已经完成了,有很多的不足,也有很多的缺陷,但从头到尾自己一个人也收获了很多东西,中间大起大落,每天都像在坐过山车,因为几乎都是陌生的东西。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值