![](/img/trans.png)
[英]Volley JSONObjectRequest Request.Method.POST but received GET
[英]Volley JsonObjectRequest Post request ignoring params
我正在嘗試使用凌空連接到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<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與Volley Library合作
編輯:
401是“未授權”的狀態代碼。 如果您在嘗試HTACCESS時獲得401 ,請參閱此問題 。 您需要使用Authenticator
傳遞參數。
而不是在請求中放置參數,嘗試使用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()");
...
}
});
在這里查看我的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.