我有一個節點後端,它在登錄後返回用戶的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