android - 无法通过 android 中的 volley 以 url 编码的形式发布参数

标签 android android-volley

我正在尝试点击一个 api(用 PHP 编写)并使用它发布参数。 这是我的代码:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
            url, null,
            new com.android.volley.Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    System.out.println("prerna succes volley "+response.toString());
                }
            }, new com.android.volley.Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {

            System.out.println("prerna fail volley "+error.toString());
        }
    })


    {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> pars = new HashMap<String, String>();
            pars.put("Content-Type", "application/x-www-form-urlencoded");
            return pars;
        }


        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("action", "login");
            params.put("username", "abc@xyz.com");
            params.put("pass", "a");
            return params;
        }

    };

我总是得到无效的用户名/密码,这已经在 api 中处理,以防用户名和密码无效。在这种情况下,api 没有收到参数。 我尝试通过改造来做到这一点,并且它可以很好地工作,这意味着 API 编码没有问题。如果发生 Volley 抽射,我在这里缺少什么?

最佳答案

感谢支持。我可以通过将 JsonObjectRequest 更改为 StringRequest 来解决问题。我找到了Volley JsonObjectRequest Post parameters no longer work在那里我了解到 JsonObjectRequest 会产生一些意想不到的问题。 这是我的代码:

    StringRequest jsonObjReq = new StringRequest(Request.Method.POST,
            url,
            new com.android.volley.Response.Listener<String>() {

                @Override
                public void onResponse(String response) {

                    try {
                        JSONObject jsonObject = new JSONObject(response.toString());
                        String no = jsonObject.getString("$PhoneNo");

                    } catch (JSONException e) {

                    }
                }
            }, new com.android.volley.Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {

            System.out.println("prerna fail volley " + error.toString());
        }
    })


    {
        @Override
        public String getBodyContentType() {
            Map<String, String> pars = new HashMap<String, String>();
            pars.put("Content-Type", "application/x-www-form-urlencoded");
            //return pars;
            return "application/x-www-form-urlencoded";
        }


        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("action", "login");
            params.put("username", "abc@xyz.com");
            params.put("pass", "a");
            return params;
        }

    };

但是我仍在尝试弄清楚为什么 JsonobjectRequest 不起作用。

关于android - 无法通过 android 中的 volley 以 url 编码的形式发布参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39274925/

相关文章:

android - Gradle安装报错: Javadoc

android - 禁用 Volley 缓存管理

java - google volley 单例真的线程安全吗?

android - Volley 的 NetworkImageView 没有出现在 Spinner 中

android - 链接到共享库时防止函数从静态库中剥离?

SurfaceView 中的 Android 相机预览

java - Android Volley - 检查互联网状态

android-volley - 具有不同 POST 请求的 Android Volley 缓存

android - Android :layout_gravity? 发生了什么

Android:在谷歌日历中发布事件