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()"); ... } });
在这里查看我的答案。
- “不要将Android上下文类放在静态字段中; 这是内存泄漏“ – 静态视图的Lint警告
- 如何使用Volley获取错误消息描述
- 致命exception:android.view.WindowManager $ BadTokenException无法添加窗口 – 令牌无效; 你的活动在运行吗?
- 滚动时更改ListView项中按钮的文本
- 通过Java lib Apache Commons上传文件的简明示例
- 使用单个连接实例实现Eclipse MQTT Android Client
- Crosswalk从JavaScript调用Java方法
- 如何在Windows 7命令提示符下编写adb命令
- 紧紧抓住UPnP不返回动作