亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有標頭和正文參數的排球請求

帶有標頭和正文參數的排球請求

HUWWW 2022-06-04 15:37:14
我需要提出一個 api 請求。兩個標題:接受授權五個身體參數。數字制作模型描述盤子通過郵遞員,一切都很好。但是當我嘗試通過android應用程序時,我無法通過。注意:通過同一主機登錄效果很好,所以設置不是問題,我認為我的主要問題在于 api 調用。public void add(View view) {        RequestQueue queue = Volley.newRequestQueue(this);        String URL = "http://10.0.2.2:8000/api/trucks";        StringRequest request = new StringRequest(Request.Method.POST, URL,                new Response.Listener<String>() {                    @Override                    public void onResponse(String response) {                        try {                            JSONObject jsonObj = new JSONObject(response);                            // parse response                        } catch (JSONException e) {                            e.printStackTrace();                        }                    }                },                new Response.ErrorListener() {                    @Override                    public void onErrorResponse(VolleyError error) {                        NetworkResponse response = error.networkResponse;                        String errorMsg = "";                        if (response != null && response.data != null) {                            String errorString = new String(response.data);                        }                    }                }        ) {            @Override            public Map<String, String> getHeaders() {                HashMap<String, String> headers = new HashMap<>();                headers.put("Accept", "application/json");                headers.put("Authorization", "Bearer " + myToken);                return headers;            }        };        queue.add(request);    }
查看完整描述

3 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

通過解決方案#1。


public void add(View view) throws JSONException {

    RequestQueue queue = Volley.newRequestQueue(this);

    TextInputEditText number = findViewById(R.id.textInputEditTextNumber);

    TextInputEditText make = findViewById(R.id.textInputEditTextMake);

    TextInputEditText model = findViewById(R.id.textInputEditTextModel);

    TextInputEditText description = findViewById(R.id.textInputEditTextDescription);

    TextInputEditText plates = findViewById(R.id.textInputEditTextPlates);


    JSONObject jsonObject = new JSONObject();

    jsonObject.put("Number", number.getText().toString());

    jsonObject.put("Make", make.getText().toString());

    jsonObject.put("Model", model.getText().toString());

    jsonObject.put("Description", description.getText().toString());

    jsonObject.put("Plates", plates.getText().toString());

    final String requestBody = jsonObject.toString();


    JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, "http://10.0.2.2:8000/api/trucks", jsonObject,

            new Response.Listener<JSONObject>() {

        @Override

        public void onResponse(JSONObject response) {


            //now handle the response

            Toast.makeText(truck_add.this, response.toString(), Toast.LENGTH_SHORT).show();


        }

    }, new Response.ErrorListener() {

        @Override

        public void onErrorResponse(VolleyError error) {


            //handle the error

            Toast.makeText(truck_add.this, "An error occurred", Toast.LENGTH_SHORT).show();

            error.printStackTrace();

        }

    }) {    //this is the part, that adds the header to the request

        @Override

        public Map<String, String> getHeaders() {

            Map<String, String> params = new HashMap<String, String>();

            params.put("Accept", "application/json");

            params.put("Authorization", myToken);

            return params;

        }

    };

    queue.add(jsonRequest);

}


查看完整回答
反對 回復 2022-06-04
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

當你想通過 body 傳遞數據時,你需要在字符串請求之前創建一個 json 對象。

試試這種方式,

1. 為請求創建一個字符串 url。

2.為body數據創建json對象并將數據傳遞給它。喜歡,


JSONObject jsonObject= new JSONObject();  

jsonObject.put("Number", address.getNumber());  

jsonObject.put("Make", address.getMake());  

jsonObject.put("Model", address.getModel());  

jsonObject.put("Description", address.getDescription());  

jsonObject.put("Plates", address.getPlates());  

final String requestBody=jsonObject.toString();  

3. 在此之后,應用 stringRequest。

4. 現在,在標題方法之前和錯誤方法之后添加以下行。


@Override

        public String getBodyContentType() {

            return "application/json; charset=utf-8";

        }


        @Override

        public byte[] getBody() throws AuthFailureError {

            try {

                return requestBody == null ? null : requestBody.getBytes("utf-8");

            } catch (UnsupportedEncodingException uee) {

                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");

                return null;

            }  

5. 在您的 getHeaders() 方法中,將 Content-Type 用于“application/json”,對于授權,您必須僅使用不帶 (Bearer) 的令牌。

完畢。


查看完整回答
反對 回復 2022-06-04
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

public void add(View view) throws JSONException {

   String URL = "http://10.0.2.2:8000/api/trucks";


   //removed views initialization from here.  

//you need to initialize views in oncreate() / oncreateView() method.  

/*first create json object in here.

then set keys as per required body format with values

*/

    JSONObject jsonObject = new JSONObject();

    jsonObject.put("Number", number.getText().toString());

    jsonObject.put("Make", make.getText().toString());

    jsonObject.put("Model", model.getText().toString());

    jsonObject.put("Description", description.getText().toString());

    jsonObject.put("Plates", plates.getText().toString());

    final String requestBody = jsonObject.toString();


 RequestQueue queue = Volley.newRequestQueue(this);


    StringRequest request = new StringRequest(Request.Method.POST, URL,

            new Response.Listener<String>() {

                @Override

                public void onResponse(String response) {

                    try {

                        JSONObject jsonObj = new JSONObject(response);

                        // parse response

                    } catch (JSONException e) {

                        e.printStackTrace();

                    }

                }

            },

            new Response.ErrorListener() {

                @Override

                public void onErrorResponse(VolleyError error) {

                    NetworkResponse response = error.networkResponse;

                    String errorMsg = "";

                    if (response != null && response.data != null) {

                        String errorString = new String(response.data);

                    }

                }

            }

    )  {    //this is the part, that adds the header to the request

//this is where you need to add the body related methods

@Override

    public String getBodyContentType() {

        return "application/json; charset=utf-8";

    }


    @Override

    public byte[] getBody() throws AuthFailureError {

        try {

            return requestBody == null ? null : requestBody.getBytes("utf-8");

        } catch (UnsupportedEncodingException uee) {

            VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s 

using %s", requestBody, "utf-8");

            return null;

        } 

        @Override

        public Map<String, String> getHeaders() {

            Map<String, String> params = new HashMap<String, String>();

            params.put("Content-Type", "application/json");

            params.put("Authorization", myToken);

            return params;

        }

    };

    queue.add(jsonRequest);

}  

在每個方法中輸入日志以檢查正在執行的方法以及可能的錯誤

如果在此之后有錯誤,則從 logcat 中發布錯誤,我們將迅速解決。


查看完整回答
反對 回復 2022-06-04
  • 3 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號