目录

一、概述

二、代码与实现

三、总结归纳


一、概述

        本文将通过Android Studio原生安卓环境,通过Post网络请求与新大陆物联网云平台官网进行通信,实现获取用户Token。

        Need:Android Studio、okhttp3

        知识点:多线程、Post请求、Json数据封装、基础Android知识

        建议先阅读文章:

        新大陆物联网竞赛-Android开发-导入JAR包与添加依赖

        [初级]JAVA中TCP/HTTP协议JSON数据的封装~三分钟看懂

        新大陆物联网-Android实现网关功能-连接云平台并上传传感器数据-获取执行器指令


二、代码与实现

        首先我们下载并打开API开发文档。

        新大陆物联网云平台应用最新官方API开发文档_2022

        打开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的区别。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐