Volley JsonObjectRequest Post 请求忽略参数
Posted
技术标签:
【中文标题】Volley JsonObjectRequest Post 请求忽略参数【英文标题】:Volley JsonObjectRequest Post request ignoring params 【发布时间】:2014-06-25 17:06:15 【问题描述】:我正在尝试使用 volley 连接到 API,我正在设置所有参数和标头,但似乎这些参数被忽略了,我在这里缺少什么?我上周开始学习 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()
【问题讨论】:
您似乎在问两个重复的问题,here 是您之前的问题并且您接受了答案,为什么还要问这个? 【参考方案1】:很明显,有时我们需要在点击url的同时提交请求参数。为此,我们必须重写 getParams()
方法,该方法应返回要以键值格式发送的参数列表。
所以,将getParams()
中的JsonObjectRequest
覆盖为
@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
传递参数。
【讨论】:
仍然收到错误 401,如果我从服务器中删除密码和电子邮件,只留下令牌作为安全性,它可以完美运行 @AndroidEnthusiast 检查我的答案【参考方案2】:不要将参数放在请求中,而是尝试使用JsonObjectRequest
对象的第三个参数,它是一个 JSON 对象(我的代码中的 jsonobj
)。
类似:
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, URL, jsonobj, new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
System.out.println("onResponse()");
...
);
查看我的答案here。
【讨论】:
以上是关于Volley JsonObjectRequest Post 请求忽略参数的主要内容,如果未能解决你的问题,请参考以下文章
Volley JsonObjectRequest Post 参数不再起作用
Volley JsonObjectRequest Post 请求忽略参数
带有参数的 Volley jsonObjectRequest 不起作用
Android-Volley网络通信框架(StringRequest & JsonObjectRequest)
Volley JsonObjectRequest Post 请求不起作用
Volley Post JsonObjectRequest 在使用 getHeader 和 getParams 时忽略参数