我正在尝试向我的API发出POST
请求,它可以在Postman
中工作(我得到一个有效的JSON对象),但不使用Volley
。使用以下代码:
String URL = "http://somename/token";
RequestQueue queue = Volley.newRequestQueue(StartActivity.this);
queue.add(new JsonObjectRequest(Method.POST, URL, null,
new Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// handle response
Log.i("StartActivity", response.toString());
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// handle error
Log.i("StartActivity", error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("username", "someUsername");
headers.put("password", "somePassword");
headers.put("Authorization", "Basic someCodeHere");
return headers;
}
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
params.put("grant_type", "client_credentials");
return params;
}
});
我收到以下错误:
02-12 21:42:54.774: E/Volley(19215): [46574] BasicNetwork.performRequest: Unexpected response code 400 for http://somename/token/
我看过很多例子,我真的不知道哪里出了问题。有人知道吗?
我用这个方法更新了代码:
HashMap<String, String> createBasicAuthHeader(String username, String password) {
HashMap<String, String> headerMap = new HashMap<String, String>();
String credentials = username + ":" + password;
String base64EncodedCredentials =
Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
headerMap.put("Authorization", "Basic " + base64EncodedCredentials);
return headerMap;
}
并将获取标题()
更改为:
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return createBasicAuthHeader("username", "password");
}
仍然收到相同的错误!
此错误可能有多种原因。
当然,正如其他人所说,其中一个原因可能是您缺少或设置了不正确的“Content-type”头。
如果您已经正确地实现了这一点,另一个可能的原因是您直接从您的URL发送params。可能会出现params是一个字符串,其中包含一些空格的情况。这些空格会导致通过Volley的GET请求出现问题。您需要找到另一种方法来解决它。仅此而已。
如果要将json值传递到body中(原始json)。无需将内容类型设置为标题。put(“内容类型”,“application/json;charset=utf-8”);
当我在头回调中使用内容类型时,我在logcat中得到的400响应状态。我评论了标题。put(“内容类型”,“application/json;charset=utf-8”);因为我在调用api时在body中传递原始json。邮递员截图附呈。这会有帮助的
private void volleyCall(String email, String password) {
RequestQueue queue= Volley.newRequestQueue(this);
String URL = "http://XXXX.in:8080/XXXX/api/userService/login";
Map<String, String> jsonParams = new HashMap<String, String>();
jsonParams.put("email", email);
jsonParams.put("password", password);
Log.d(TAG,"Json:"+ new JSONObject(jsonParams));
JsonObjectRequest postRequest = new JsonObjectRequest( Request.Method.POST, URL,new JSONObject(jsonParams),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG,"Json"+ response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Handle Error
Log.d(TAG, "Error: " + error
+ "\nStatus Code " + error.networkResponse.statusCode
+ "\nResponse Data " + error.networkResponse.data
+ "\nCause " + error.getCause()
+ "\nmessage" + error.getMessage());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String,String>();
// headers.put("Content-Type", "application/json; charset=utf-8");
return headers;
}
@Override
public String getBodyContentType() {
return "application/json";
}
};
queue.add(postRequest);
}
LogCat:
LoginActivity: Json:{"email":"XXXXXX@gmail.com","password":"abcde"}
LoginActivity: Error: com.android.volley.ServerError
Status Code 400
Response Data [B@63ca992
Cause null
messagenull
我尝试发送一个删除请求到我的服务器,但我得到一个400坏的请求错误代码。我找了很多,但我找不到任何有帮助解决方案。当我尝试与邮差,请求工作良好。 这是来自Postman的curl命令的外观: 这是我的Java代码: 我还尝试在头中不设置Content-Type,但当我得到一个415错误时,我还删除了getBodyContentType()方法,但这也没有改变。 还有什么能帮上忙的点子吗?
我正在从服务器下载文件。我用排球来做。 这是我的代码 以下是错误侦听器的错误消息在一些弱网络连接上,我收到以下逻辑消息 我不明白失败的原因是什么,因为大多数错误消息都返回null。我很确定这是因为请求超时,我知道如何增加超时,但是我应该在错误侦听器中编写什么代码,以便在出现错误时获得正确的错误消息。
关于在项目中使用截击,我有几个问题: 这个库可以在任何Java项目中使用,还是仅在Android中使用
我使用的是volley.jar,在编译时没有错误,但是有运行时异常。 然后添加volley.jar和build path。什么是问题? CustomAdapter.java
如果我点击Debug图标,Android Studio有时会自动创建新的文件,然后抱怨它应该只有一个名为... 可以修复它,但它太烦人了,所以必须有一个可靠的解决方案。 提前致谢 编辑: 我的文件: 我的: 编辑:当我生成和调试时,在控制台中收到以下错误警告: 在此版本中使用了不推荐使用的Gradle功能,使其与Gradle 7.0不兼容。使用'--warning-mode all‘显示单个弃用警
**构建指纹:“小米/markw/markw:6.0.1/mmb29m/v8.2.4.0.mbemidl:user/release-keys”版本:“0”abi:“arm”pid:15075,tid:15115,名称:Thread-10486 com.mynamespace.myapp<<<信号6(SIGABRT),代码-6(SI_TKILL),故障地址-------中止消息:'art/runti