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
推荐阅读