【问题标题】:volley post request issue凌空发帖请求问题
【发布时间】:2018-04-07 06:46:06
【问题描述】:

我不是 Android / Java 开发人员,但我需要在一个开源项目中解决这个问题。

我在提交请求时遇到错误“E / Volley: [300] BasicNetwork.performRequest”,并且没有对此错误给出进一步的解释。

btnSubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String URL ="http://someURL/api/crm/check_login";
        Response.Listener<String> listener = new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                // LOG Response Or ... 
            }
        };           
        StringRequest request = new StringRequest(Request.Method.POST, URL, listener, errorListener)
        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {    
                Map<String, String> params = new HashMap<>();
                params.put("username","TEST");
                params.put("password","123456");
                return  params;    
            }
        };                        
        AppController.getInstance().addToRequestQueue(request);    
    });
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    您可以直接使用您的网址http://192.168.0.130:1010/api/CRM/check_login?username=test&amp;password=123

    因为getParams() 方法用于application/form-data 而不是Query 参数,所以它对你不起作用。

    来源:

    btn_volley.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String username="test";//you can get username and password from edittexts
            String password="123";
    
            String URL = "http://192.168.0.130:1010/api/CRM/check_login?username="+username+"&password="+password;
    
            Response.Listener<String> listener = new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    if (response.isEmpty()) {
                        Toast.makeText(getApplicationContext(), "test",Toast.LENGTH_LONG).show();
                    } else {
                           Toast.makeText(getApplicationContext(),response,Toast.LENGTH_LONG).show();
                    }
                }
            };
    
            Response.ErrorListener errorListener = new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                           Toast.makeText(getApplicationContext(),"error",Toast.LENGTH_LONG).show();
                }
            };
    
            StringRequest request = new StringRequest(Request.Method.POST, URL, listener, errorListener);
    
            AppController.getInstance().addToRequestQueue(request);
    
        }
    });
    

    【讨论】:

    • 是的,我检查了你的邮递员请求屏幕截图,没有 api 的标题。删除您的 getParams() 方法直接使用 url
    【解决方案2】:

    您需要将 Content-Type 添加到标题中。

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Content-Type", "application/json; charset=utf-8");
        return headers;
    }
    

    【讨论】:

    • 我认为 Api 是为获取 URL 中的参数而创建的,因此请尝试在 URL 中传递参数而不是在参数中
    猜你喜欢
    • 2017-06-19
    • 2016-08-23
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多