java - Volley JsonObjectRequest 发布请求忽略参数

标签 java android android-volley

我正在尝试使用 volley 连接到 API,我正在设置所有参数和 header ,但似乎参数被忽略了,我在这里遗漏了什么?我上周开始学习 android volley,但我有点迷路了。

    package com.rep.app.principal;

    import android.os.AsyncTask;
    import android.os.Bundle;

    import android.util.Log;
    import android.view.View;
    import android.widget.TextView;

    import com.actionbarsherlock.app.SherlockFragmentActivity;
    import com.android.volley.AuthFailureError;
    import com.android.volley.Request;
    import com.android.volley.RequestQueue;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.VolleyLog;
    import com.android.volley.toolbox.JsonObjectRequest;
    import com.android.volley.toolbox.Volley;
    import com.rep.R;


    import org.json.JSONObject;

    import java.util.HashMap;

    import java.util.Map;


    public class InicioActivity extends SherlockFragmentActivity {


       RequestQueue queue = null;




        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            txtDisplay = (TextView) findViewById(R.id.txtDisplay);

            queue=Volley.newRequestQueue(this);


            AutenticacaoLocalTask mAutenticacaoLocalTask = new AutenticacaoLocalTask();
            mAutenticacaoLocalTask.execute((Void) null);

        }
        private TextView txtDisplay;



        public class AutenticacaoLocalTask extends AsyncTask<Void, Void, Boolean> {

            @Override
            protected Boolean doInBackground(Void... params) {


                try {


                    txtDisplay = (TextView) findViewById(R.id.txtDisplay);

                    String url = "http://192.168.1.18/opa/api/";


                   JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,url,null,
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                                System.out.println(response);

                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {

                            }
                        })

                   {

                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {

                        HashMap<String, String> headers = new HashMap<String, String>();
                        headers.put("TOKEN", "99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkDaaDAcbFfd19MfacGf3FFm8CM1hG0eDiIk8");

                        return headers;
                    }

   @Override 
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("email", "rm@test.com.br");
                    params.put("senha", "aaa");

                    return params;
                }
          };    

              queue.add(jsObjRequest);
                    return true;

                } catch (Exception e) {
                    Log.e("RM", e.getMessage());
                    return false;
                }

            }

            @Override
            protected void onPostExecute(final Boolean success) {

            }

            @Override
            protected void onCancelled() {

            }
        }


    }

最佳答案

很明显,有时我们需要在点击url的同时提交请求参数。为此,我们必须覆盖 getParams() 方法,该方法应返回要以键值格式发送的参数列表。

因此,将 JsonObjectRequest 中的 getParams() 重写为

            @Override 
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("email", "rm@test.com.br");
                params.put("senha", "aaa");

                return params;
            }

即使用下面的代码作为

 JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,url,null,
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                                System.out.println(response);

                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {

                            }
                        })

                   {

                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {

                        HashMap<String, String> headers = new HashMap<String, String>();
                        headers.put("TOKEN", "99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkDaaDAcbFfd19MfacGf3FFm8CM1hG0eDiIk8");

                        return headers;
                    }

   @Override 
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("email", "rm@test.com.br");
                    params.put("senha", "aaa");

                    return params;
                }
          };

有关详细信息,请参阅 Android working with Volley Library

编辑:

401 是“未授权”的状态代码。如果您在尝试 HTACCESS 时收到 401,请参阅此 question .您需要使用 Authenticator 传递参数。

关于java - Volley JsonObjectRequest 发布请求忽略参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24414652/

相关文章:

java - 使用随机数打乱数组

java - 在 Android 上动画约束布局更改的最佳方式

java - 如何获取当前android设备的时间?

android - Volley 图像位图为空

android - 当我取消网络请求时,Volley 没有回电

Java线程队列

Java System.setProperties 可能会影响其他代码

android - 在 4*3 的网格中排列 12 个 RadioButton

java - 如何从另一个类中调用 onItemClick 方法?

android - Volley 的磁盘缓存内存不足问题