发布于 

安卓原生与 NleCloud 通信最简封装

定义公共属性

1
2
3
String BASE_URL = "https://api.nlecloud.com/";	// 新大陆云平台地址
String ACCESS_TOKEN = "XXXXXXXXXX"; // AccessToken
String DEVICE_ID = "XXXXXX"; // 设备 ID

HTTP 请求函数封装

使用 HttpClient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
* HTTP GET 请求
* @param api API path
* @return HTTP response
*/
String HTTP_GET(String api) {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(BASE_URL + api);
httpGet.addHeader("AccessToken", ACCESS_TOKEN);
HttpResponse response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity);
}
} catch (IOException e) {
e.printStackTrace();
}
return "";
}

/**
* HTTP POST 请求
* @param api API path
* @param body Request body
* @return HTTP response
*/
String HTTP_POST(String api, String body) {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(BASE_URL + api);
httpPost.addHeader("AccessToken", ACCESS_TOKEN);
httpPost.addHeader("Content-Type", "application/json");
HttpEntity payloadEntity = new StringEntity(body);
httpPost.setEntity(payloadEntity);
HttpResponse response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity);
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* 获取传感器/执行器值
* @param api_tag 设备 API Tag
* @return 传感器/执行器值
*/
String fetchSensor(String api_tag) {
return gson.fromJson(HTTP_GET(String.format(Locale.CHINA, "devices/%s/Sensors/%s", DEVICE_ID, api_tag)), SensorResponse.class).getResultObj().getValue();
}

/**
* 控制执行器
* @param api_tag 执行器 API Tag
* @param value 开关状态
*/
void control(String api_tag, int value) {
Log.i("CONTROL", HTTP_POST(String.format(Locale.CHINA, "Cmds?deviceId=%s&apiTag=%s", DEVICE_ID, api_tag), String.valueOf(value)));
}