大家好,我对Volley POST请求有疑问。我要登录仅用于登录用户的框。该请求的响应只是此日志框的html代码。它应该登录我(例如下面的POSTman代码),然后我可以做我需要做的其他事情。代码中的登录数据仅作为示例是无效的。
@Override
protected void onCreate(Bundle savedInstanceState) {
requestQueue = Volley.newRequestQueue(this);
requestQueue.start();
}
@Override
public void onClick(View v) {
if (v == buttonLogin) {
loginUser();
}
}
public void loginUser() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://ns3.apis.sk:28080/login_check",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
getJsonData();
Log.d("Response", response);
Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<>();
params.put("_username","admin");
params.put("_password","root");
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
final HashMap<String, String> headers = new HashMap<>();
headers.put("Content-Type", "multipart/form-data");
return headers;
}
};
requestQueue.add(stringRequest);
}
也有POSTman代码可以正常执行我想在Android中实现的功能。
{
"name": "http://ns3.apis.sk:28080 - login_check",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "formdata",
"formdata": [
{
"key": "_username",
"value": "admin",
"type": "text"
},
{
"key": "_password",
"value": "root",
"type": "text"
}
]
},
"url": {
"raw": "http://ns3.apis.sk:28080/login_check",
"protocol": "http",
"host": [
"ns3",
"apis",
"sk"
],
"port": "28080",
"path": [
"login_check"
]
}
},
"response": []
}
答案 0 :(得分:0)
将此代码用作标题
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
final HashMap<String, String> headers = new HashMap<>();
// headers.put("Content-Type", "multipart/form-data");
return headers;
@Override
public String getBodyContentType() {
return "multipart/form-data";
}
将此用于字段
JSONObject jsonParams = new JSONObject();
jsonParams .put("_username","admin");
jsonParams .put("_password","root");
我希望这会对您有所帮助
答案 1 :(得分:0)
大家好,终于解决了。删除了getheaders()方法。可能Volley库知道隐式使用什么。最重要的是启用cookie,因为Volley默认将其禁用。
@Override
protected void onCreate(Bundle savedInstanceState) {
CookieManager manager = new CookieManager();
CookieHandler.setDefault(manager);
requestQueue = Volley.newRequestQueue(this);
requestQueue.start();
}
@Override
public void onClick(View v) {
if (v == buttonLogin) {
loginUser();
}
}
public void loginUser() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://ns3.apis.sk:28080/login_check",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
getJsonData();
Log.d("Response", response);
Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<>();
params.put("_username","admin");
params.put("_password","root");
return params;
}
};
requestQueue.add(stringRequest);