gpt4 book ai didi

Android Volley - BasicNetwork.performRequest : Unexpected response code 400

转载 作者:IT老高 更新时间:2023-10-28 22:23:32 26 4
gpt4 key购买 nike

问题陈述:

我正在尝试访问一个 REST API,该 API 将使用 Volley 为各种 HTTP 状态代码(400、403、200 等)返回一个 JSON 对象。

对于 200 以外的任何 HTTP 状态,“意外响应代码 400”似乎是个问题。有没有人有办法绕过这个“错误”?

代码:

protected void getLogin() {   
final String mURL = "https://somesite.com/api/login";

EditText username = (EditText) findViewById(R.id.username);
EditText password = (EditText) findViewById(R.id.password);

// Post params to be sent to the server
HashMap<String, String> params = new HashMap<String, String>();
params.put("username", username.getText().toString());
params.put("password", password.getText().toString());

JsonObjectRequest req = new JsonObjectRequest(mURL, new JSONObject(
params), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {

try {
JSONObject obj = response
.getJSONObject("some_json_obj");

Log.w("myApp",
"status code..." + obj.getString("name"));

// VolleyLog.v("Response:%n %s", response.toString(4));

} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.w("error in response", "Error: " + error.getMessage());
}
});

// add the request object to the queue to be executed
AppController.getInstance().addToRequestQueue(req);
}

最佳答案

在不更改 Volley 的源代码的情况下执行此操作的一种方法是检查 VolleyError 中的响应数据并自行解析。

截至 f605da3 commit , Volley 抛出 ServerError exception包含原始网络响应。

所以你可以在你的错误监听器中做类似的事情:

/* import com.android.volley.toolbox.HttpHeaderParser; */
public void onErrorResponse(VolleyError error) {

// As of f605da3 the following should work
NetworkResponse response = error.networkResponse;
if (error instanceof ServerError && response != null) {
try {
String res = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, "utf-8"));
// Now you can use any deserializer to make sense of data
JSONObject obj = new JSONObject(res);
} catch (UnsupportedEncodingException e1) {
// Couldn't properly decode data to string
e1.printStackTrace();
} catch (JSONException e2) {
// returned data is not JSONObject?
e2.printStackTrace();
}
}
}

以后,如果Volley发生变化,可以按照上面的方法检查VolleyError中是否有服务器发送的原始数据并进行解析.

我希望他们实现 source file 中提到的 TODO .

关于Android Volley - BasicNetwork.performRequest : Unexpected response code 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26796965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com