为了账号安全,请及时绑定邮箱和手机立即绑定

带有标头和正文参数的排球请求

带有标头和正文参数的排球请求

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 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号