Volley JsonObjectRequest发布请求忽略参数

我正在尝试使用volley连接到API,我正在设置所有参数和标题,但似乎这些参数被忽略了,我在这里缺少什么? 我上周开始学习机器人凌空,我有点失落。

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 { @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() { @Override public void onResponse(JSONObject response) { System.out.println(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) { @Override public Map getHeaders() throws AuthFailureError { HashMap headers = new HashMap(); headers.put("TOKEN", "99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkDaaDAcbFfd19MfacGf3FFm8CM1hG0eDiIk8"); return headers; } @Override protected Map getParams() { Map params = new HashMap(); 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 getParams() { Map params = new HashMap(); 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() { @Override public void onResponse(JSONObject response) { System.out.println(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) { @Override public Map getHeaders() throws AuthFailureError { HashMap headers = new HashMap(); headers.put("TOKEN", "99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkDaaDAcbFfd19MfacGf3FFm8CM1hG0eDiIk8"); return headers; } @Override protected Map getParams() { Map params = new HashMap(); params.put("email", "rm@test.com.br"); params.put("senha", "aaa"); return params; } }; 

有关更多信息,请参阅Android与Volley Library合作

编辑:

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

不要在请求中放置参数,而是尝试使用JsonObjectRequest对象的第三个参数,它是一个JSON对象(我的代码中为jsonobj )。

就像是:

 JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, URL, jsonobj, new Response.Listener() { @Override public void onResponse(JSONObject response) { System.out.println("onResponse()"); ... } }); 

在这里查看我的答案。