天天看點

Android okhttp 建立請求參數格式為json資料格式注意:手機調試和本地背景對接接口必須是在 同一區域網路内測試

這裡涉及到資料okhttp 的一些使用,我就不多說了,自己在主的項目去添加相關的依賴。

最新依賴看github 上最新的

https://github.com/square/okhttp

注意:手機調試和本地背景對接接口必須是在 同一區域網路内測試

還有相關的檔案清單 給予相關的權限

<uses-permission android:name="android.permission.INTERNET" />           

下面我們有一個接口用到,調用時,請求參數,發送的是一段json資料。

{
	"deviceNum": "test123",
	"data": {
		"ipAddress": "192.168.1.01",
		"totalSize": 20000,
		"usedSize": 1000,
		"cpuUsage": 0.02,
		"ramUsage": 0.12
	}
}           

我這邊用到的是post方式,将上面完整複制過來到編輯器的時候,我們會看到以下的格式:

String json="{\n" +
        "\t\"deviceNum\": \"test123\",\n" +
        "\t\"data\": {\n" +
        "\t\t\"ipAddress\": \"192.168.1.01\",\n" +
        "\t\t\"totalSize\": 20000,\n" +
        "\t\t\"usedSize\": 1000,\n" +
        "\t\t\"cpuUsage\": 0.02,\n" +
        "\t\t\"ramUsage\": 0.12\n" +
        "\t}\n" +
        "}";
           

雖然沒有什麼問題,但是我們請求的時候,資料參數不斷變化,這樣就很容易出錯,我就參考了一些json對象嵌套json對象的方式,就有了下面的

JSONObject jsonObject = new JSONObject();
                    JSONObject jsonObject1 = new JSONObject();
                    jsonObject1.put("ipAddress", "192.168.1.01");
                    jsonObject1.put("totalSize", 20000);
                    jsonObject1.put("usedSize", 1000);
                    jsonObject1.put("cpuUsage", 0.02);
                    jsonObject1.put("ramUsage", 0.12);

                    jsonObject.put("deviceNum", "D01");
                    jsonObject.put("data", jsonObject1);
                    Log.i("json格式", jsonObject.toString());           

log列印出來就是:

Android okhttp 建立請求參數格式為json資料格式注意:手機調試和本地背景對接接口必須是在 同一區域網路内測試

當時我這邊隻是寫了json對象嵌套json對象的方式,還有很多的複雜格式比如對象嵌套數組,還有很多複雜互相嵌套的,我這裡就不一一列舉了,等我需要用到了,我在補充上來,但是我可以很好的利用JSONObject ,JSONArray的使用方法來靈活運用。

推薦相關的json網站,了解一下。

  https://www.runoob.com/js/js-json.html

https://www.runoob.com/w3cnote/java-json-instro.html
           
private static JSONObject jsonObject;
 private static JSONObject jsonObject1; 

private static void updata() {
        new Thread() {
            @Override
            public void run() {
                try {
                    jsonObject = new JSONObject();
                    jsonObject1 = new JSONObject();
                    jsonObject1.put("ipAddress", "192.168.1.01");
                    jsonObject1.put("totalSize", 20000);
                    jsonObject1.put("usedSize", 1000);
                    jsonObject1.put("cpuUsage", 0.02);
                    jsonObject1.put("ramUsage", 0.12);

                    jsonObject.put("deviceNum", "D01");
                    jsonObject.put("data", jsonObject1);
                    Log.i("json格式", jsonObject.toString());
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                //建立一個OkHttpClient對象
                OkHttpClient okHttpClient = new OkHttpClient();
                //建立一個RequestBody(參數1:資料類型 參數2傳遞的json串)
                //json為String類型的json資料
                RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
                //建立一個請求對象
                Request request = new Request.Builder()
                        .url("xxxxxxxxxxxxxxxxxxxxxxxxxxx")//上傳接口
                        .post(requestBody)
                        .build();
                okHttpClient.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        Log.e("==失敗傳回==:", e.toString() + "");
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        Log.e("==成功傳回==:", response.body().string());
                    }
                });
            }
        }.start();
    }           

然後根據傳回結果去處理自己的資料處理了。

繼續閱讀