平台选择
Android实现平台:Android student 4.2.2
移动云(ONENET):有清晰的文档使用,结构简单,适合快速学习与集成自己项目
接入云端数据:
Android端实现:
步骤一:导入网络请求包
/*okhttp 插件*/
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2'
/*Retrofit库*/
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
/*Retrofit嵌套请求 rejava3*/
implementation "io.reactivex.rxjava2:rxjava:2.1.0" // 必要rxjava2依赖
implementation 'com.squareup.retrofit2:adapter-rxjava:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
// 必要依赖,和Rxjava结合必须用到,下面会提到
implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'
导入包说明
Okhttp3基本使用
Retrofit2 详解和使用
使用Retrofit+RxJava实现网络请求
步骤二:代码实现
运用 RXjava 实现网络请求
/**
* TODO RX思维
* 获取设备状态
*/
public void RxAsync(){
//步骤4:创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.heclouds.com/") // 设置 网络请求 Url
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
// 步骤5:创建 网络请求接口 的实例
SB_HttpBinService request = retrofit.create(SB_HttpBinService.class);
// 步骤6:采用Observable<...>形式 对 网络请求 进行封装
Observable<Online_json> observable = request.getMessage(State.ApiKey,State.DeviceIDs);
System.out.println(State.DeviceIDs);
// 步骤7:发送网络请求
observable.subscribeOn(Schedulers.io()) // 在IO线程进行网络请求
.observeOn(AndroidSchedulers.mainThread()) // 回到主线程 处理请求结果
.subscribe(new Observer<Online_json>() {
@Override
public void onSubscribe(Disposable d) {
Log.d("TAG", "开始采用subscribe连接");
}
@Override
public void onNext(@NotNull Online_json online_json) {
List<Devices> devices = online_json.getData().getDevices();
String o;
if (SB_Parameter.AllSUM < online_json.getData().getTotal_count()){
int j;
j=online_json.getData().getTotal_count()-SB_Parameter.AllSUM ;
for (int i = 0; i < j; i++) {
map = new HashMap<>();
map.put("id", "请刷新");
map.put("name","请刷新");
map.put("online","请刷新");
list.add(map);
}
SB_Parameter.AllSUM = online_json.getData().getTotal_count();
}
for (int i = 0 ;i<online_json.getData().getTotal_count();i++){
if (devices.get(i).getOnline()){
o = "√";
}else {
o = "×";
}
map = list.get(i);
map.put("id", devices.get(i).getId());
map.put("name", devices.get(i).getTitle());
map.put("online", o);
}
mRecyclerView.setAdapter(mRecyclerViewAdapter);
Delay.Delay_ms(500);
mRecyclerView.setAdapter(mRecyclerViewAdapter);
}
@Override
public void onError(Throwable e) {
Log.d("TAG," ,"请求失败");
}
@Override
public void onComplete() {
Log.d("TAG", "请求成功");
}
});
}
请求成功后的会返回服务器端返回的数据
{errno=0, data=Data{devices=[Devices{title='led1', online=false, id='735471469'}, Devices{title='DHT11', online=false, id='736585581'}], total_count=2}, error='succ'}
使用 bejson 网页进行Josn数据的解析,运用 网站的 JSON生成Java实体类 功能生成实体类
在这我把实体类贴出来
类 Data
/**
* Copyright 2021 bejson.com
*/
package com.example.yt_app.bean.Onenet_online;
import java.util.List;
/**
* Auto-generated: 2021-07-19 15:40:24
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
public class Data {
private List<Devices> devices;
private int total_count;
public void setDevices(List<Devices> devices) {
this.devices = devices;
}
public List<Devices> getDevices() {
return devices;
}
public void setTotal_count(int total_count) {
this.total_count = total_count;
}
public int getTotal_count() {
return total_count;
}
@Override
public String toString() {
return "Data{" +
"devices=" + devices +
", total_count=" + total_count +
'}';
}
}
类 Devices
/**
* Copyright 2021 bejson.com
*/
package com.example.yt_app.bean.Onenet_online;
/**
* Auto-generated: 2021-07-19 15:40:24
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
public class Devices {
private String title;
private boolean online;
private String id;
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setOnline(boolean online) {
this.online = online;
}
public boolean getOnline() {
return online;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
@Override
public String toString() {
return "Devices{" +
"title='" + title + ''' +
", online=" + online +
", id='" + id + ''' +
'}';
}
}
类 Online_json
/**
* Copyright 2021 bejson.com
*/
package com.example.yt_app.bean.Onenet_online;
/**
* Auto-generated: 2021-07-19 15:40:24
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
public class Online_json {
private int errno;
private Data data;
private String error;
public void setErrno(int errno) {
this.errno = errno;
}
public int getErrno() {
return errno;
}
public void setData(Data data) {
this.data = data;
}
public Data getData() {
return data;
}
public void setError(String error) {
this.error = error;
}
public String getError() {
return error;
}
@Override
public String toString() {
return "Online_json{" +
"errno=" + errno +
", data=" + data +
", error='" + error + ''' +
'}';
}
}
三个实体类写完之后还有做一件事情
实现 Retrofit 的接口
接口名称
SB_HttpBinService
/**
* Created by dell on 2021/7/16.
*/
public interface SB_HttpBinService {
// 此处回调返回的可为任意类型Call<T>,再也不用自己去解析json数据啦!!!
Observable<Online_json> getMessage(@Header("api-key") String key, @Query("devIds") String ids );
}
步骤三 :进行网络请求获取数据
实现后效果图
总结:
写的很少,需要学的东西很多,要多琢磨,努力,多学
同时也使用了讯飞语音平台,高德平台