Android网络请求-新大陆物联网云平台请求通信工程-使用Post登录新大陆云平台获取Token-物联网竞赛-物联网数据通信
本文章提到的功能属于Android中的基础开发功能,需要大家及时掌握并能随心所欲的使用,物联网上位机程序开发中,数据的上传与获取是常用的,这里需要注意本次使用的OKhttp与HttpURLConnection的区别。
目录
一、概述
本文将通过Android Studio原生安卓环境,通过Post网络请求与新大陆物联网云平台官网进行通信,实现获取用户Token。
Need:Android Studio、okhttp3
知识点:多线程、Post请求、Json数据封装、基础Android知识
建议先阅读文章:
新大陆物联网竞赛-Android开发-导入JAR包与添加依赖
[初级]JAVA中TCP/HTTP协议JSON数据的封装~三分钟看懂
新大陆物联网-Android实现网关功能-连接云平台并上传传感器数据-获取执行器指令
二、代码与实现
首先我们下载并打开API开发文档。
打开API开发文档,找到用户登录的请求,发现请求格式如下:

响应格式如下:

因此我们需要封装Json数据并上传Post数据。
此处我们需要使用okhttp3类库,在Module:app中添加如下代码:
implementation 'com.squareup.okhttp3:okhttp:4.0.0-RC1'
首先,我们需要新建如下对象:
OkHttpClient okHttpClient;
Request request;
MediaType mediaType;
RequestBody requestBody;
其次,我们初始化对象并构建Json请求:
okHttpClient=new OkHttpClient();
mediaType=MediaType.get("application/json;charset=utf-8");
requestBody=RequestBody.create(mediaType,
"{'Account':'1899*******','Password':'******','IsRememberMe':'false'}");
request=new Request.Builder()
.url("http://api.nlecloud.com/Users/Login")
.post(requestBody)
.build();
一切完成以后,我们发送Post请求:(网络请求需要多线程实现)
new Thread(new Runnable() {
@Override
public void run() {
try {
Response response = okHttpClient.newCall(request).execute();
System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
我们可以看到Json数据已经返回,下一步将是Json解析。
{"ResultObj":
{"UserID":194912,
"UserName":"",
"Email":"",
"Telphone":"189********",
"Gender":true,
"CollegeID":0,
"CollegeName":"",
"RoleName":"普通会员",
"RoleID":15,
"AccessToken":"5CF6D349FBD9A25BAE9D5FE53E35ECC7C1FAA6FFB0EE1F8AC9307813FD33BC3C694A7E6718D79C948C6B8C91704894426F0DE82DB2FB489865D1D15EAD909889146168CE7E1999BB8F85F4D77EA1EE52F3D4DEC7563C05EEB87AC287B6CD00755A3A91F0F047D469B633FE4C6CC638D1ABB422ABD3691C7FDA1F435871066209DECF65FF1F1D4DA1F4906DB2568179672C064347E50B1D5B20CB270F7F34C1A09FBB0BDD830EBE8346573074439A2FF26ACDD067CC41F2B01B415272E24EC9D3A0E216D7714A58F92A694859934B5907339EFC5595899C6820F69D1F18F47ECA",
"AccessTokenErrCode":0,
"ReturnUrl":null,
"DataToken":"046f4d42a749b6ec"},
"Status":0,
"StatusCode":0,
"Msg":null,
"ErrorObj":null}
之前我在之前的文章提到过,首选JsonObject,本次我们仍然使用它:
JSONObject jsonObject=new JSONObject(response.body().string());
System.out.println(jsonObject.get("AccessToken"));
运行后,我们看到如下输出:
W/System.err: org.json.JSONException: No value for AccessToken
at org.json.JSONObject.get(JSONObject.java:389)
at org.json.JSONObject.getString(JSONObject.java:550)
at com.example.newland.okhttps.MainActivity$1.run(MainActivity.java:43)
at java.lang.Thread.run(Thread.java:761)
并没有成功,这是为什么呢?我们查看Json数据,发现其本质上是包含在ResultObj中的,因此我们需要先将此Object取出再做取值操作:
JSONObject jsonObject=new JSONObject(response.body().string());
jsonObject=jsonObject.getJSONObject("ResultObj");
System.out.println(jsonObject.getString("AccessToken"));
再次运行,查看输出,发现成功取到了Token:

三、总结归纳
本文章提到的功能属于Android中的基础开发功能,需要大家及时掌握并能随心所欲的使用,物联网上位机程序开发中,数据的上传与获取是常用的,这里需要注意本次使用的OKhttp与HttpURLConnection的区别。
更多推荐


所有评论(0)