首页 小组 话题 唠叨 搜索 文章 相册 我的社区 用户

华为云IoTDA[HuaweiCloud 华为云设备接入]2022年的第200天,我们优化了APP与华为云沟通的Java代码。

2022-07-19 21:15:47
1
329

首先,还望阅读本篇文章的,可以结合该项目:点我GitHub地址,进行查看。


我们引用了json自有类、java里自带的网络类、okhttp3,代码如下:


import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

Huawei类有3样函数组成:CreateJsonToPost()、get(String url)、post()


使用protected,可以保护该函数只被类里调用即可。

protected String CreateJsonToPost() { ... }
protected String get(String url) { ... }
protected void post() { ... }

CreateJsonToPost()里,我们把获取IAM用户Token(使用密码)这一块所需的JSON,提取出来转成JSONObject这样组成,方便开发者填写以下信息:

//需要添加的IAM账号名、账号密码。想要获取IAM信息?点它即可→https://support.huaweicloud.com/api-iam/iam_17_0002.html
protected String JsonDomainName = "";
protected String JsonName = "";
protected String JsonPassword = "";

原本所填JSON信息的样式:


{
  "auth": {
    "identity": {
      "methods": [
        "password"
      ],
      "password": {
        "user": {
          "domain": {
            "name": "zzz"
          },
          "name": "zzz",
          "password": "zzz"
        }
      }
    },
    "scope": {
      "domain": {
        "name": "zzz"
      }
    }
  }
}

然后转义后写入Java变量的样式:


"{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"domain\":{\"name\":\"******\"},\"name\":\"******\",\"password\":\"******\"}}},\"scope\":{\"domain\":{\"name\":\"******\"}}}}";

现在,我们交给了JSONObject来生成这样的样式:


    JSONObject First = new JSONObject();
    try {
        JSONObject Auth = new JSONObject();
        First.put("auth",Auth);
        JSONObject Identity = new JSONObject();
        Auth.put("identity",Identity);
        JSONObject Password = new JSONObject();
        Identity.put("password",Password);
        JSONArray Methods = new JSONArray();
        Methods.put("password");
        Identity.put("methods",Methods);
        JSONObject User = new JSONObject();
        JSONObject UserDomain = new JSONObject();
        User.put("domain",UserDomain);
        UserDomain.put("name",JsonDomainName);
        Password.put("user",User);
        User.put("name",JsonName);
        User.put("password",JsonPassword);
        JSONObject Scope = new JSONObject();
        Auth.put("scope",Scope);
        JSONObject Domain = new JSONObject();
        Scope.put("domain",Domain);
        Domain.put("name",JsonDomainName);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return String.valueOf(First);

Get和Post,就是很正常的GET请求和POST请求了,GET请求得到设备数据,POST请求认证得到Token再GET。


但是,我们把这三个函数整合一起了,这样减少了主进程的性能损耗,更多的在图形界面的信息展示上这样会更好。


扫码_白.png
评论 (1)