我有一个节点后端,它在登录后返回用户的id, email and JWT token
。 ID和电子邮件设置在JSON响应正文中,令牌设置为HTTP标头。Android Volley读取和存储HTTP标头
我想要做的只是从标题中读取该标记并将其存储为将来的请求,直到用户注销为止,因为我之后会删除标记。
我发现了几个关于如何通过覆盖getHeaders()
来设置标题的帖子,以及如何通过覆盖parseNetworkResponse()
来读取标题。我与parseNetworkResponse()
的问题是,我必须在JSON正文上编写信息,这是我想避免的。我的getHeaders()
的其他问题是我不能“硬编码”我的头到HashMap中,因为我必须使用从服务器生成的JWT token
。
这是我的第一个Android项目,总的来说我认为这是一个简单的用例,但我现在有点困惑,所以任何帮助都将不胜感激。
相关代码:
// AuthenticationRequest.java
public class AuthenticationRequest extends JsonObjectRequest{
public AuthenticationRequest(int method, String url, JSONObject payload,
Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
super(method, url, payload, listener, errorListener);
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
JSONObject jsonResponse = new JSONObject(jsonString);
// I could fetch here with response.headers
return Response.success(jsonResponse, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException | JSONException e) {
return Response.error(new ParseError(e));
}
}
}
// BasicActivity.java
private void sendRequestToServer(String url, int method, JSONObject payload, final Class toGo) {
final AuthenticationRequest request =
new AuthenticationRequest(method, url, payload, response -> {
try {
startActivity(new Intent(this, toGo).putExtra("jsonData", response.toString()));
} catch (Exception e) {
e.printStackTrace();
}
}, Throwable::printStackTrace);
VolleySingleton.getInstance(this).addToRequestQueue(request);
}
您使用的是已经访问标题的类:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/andr oid/4.2.2_r1/com/android/volley/toolbox/HttpHeaderParser.java/ – Submersed
@Submersed首先感谢您的帮助:)我意识到这一点。我试图实现的是永久存储具体头文件'x-auth'(由服务器端生成)。 – thedude