gpt4 book ai didi

java - Volley 使用单例将访问 token 附加到每个请求

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:01 26 4
gpt4 key购买 nike

我正在做以下完美的工作

    //else proceed with the checks
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET,
checkauthurl,
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(String response) {
//do stuff here
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// do stuff here
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String> ();
TokenService tokenservice = new TokenService(ctx);
String accesstoken = tokenservice.getToken(ApiHelper.ACCESS_TOKEN_SHARED_PREF);
headers.put("Authorization", "Bearer " + accesstoken);

return headers;
}
};

// Access the RequestQueue through your singleton class.
ApiSingleton strngle = new ApiSingleton(ctx);
strngle.addToRequestQueue(jsonObjectRequest);

对于每个请求,我都必须添加请求 header 。如何直接在单例中设置请求 header 。

这是我的单例

private static ApiSingleton mInstance;
private RequestQueue mRequestQueue;
public static Context mCtx;
private ImageLoader mImageLoader;

public ApiSingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
//do stuff
}

public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}

在每个请求中附加不记名 token 时,如何避免上述代码重复?

最佳答案

public class CustomJsonRequest extends JsonRequest<Object>{
public CustomJsonRequest(String url, String requestBody, Response.Listener<Object> listener,
Response.ErrorListener errorListener) {
super(url, requestBody, listener, errorListener);
}

public CustomJsonRequest(int method, String url, String requestBody, Response.Listener<Object> listener,
Response.ErrorListener errorListener) {
super(method, url, errorListener);
}
@Override
protected Response<Object> parseNetworkResponse(NetworkResponse response) {
return Response.success(Object, HttpHeaderParser.parseCacheHeaders(response));
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String> ();
TokenService tokenservice = new TokenService(ctx);
String accesstoken = tokenservice.getToken(ApiHelper.ACCESS_TOKEN_SHARED_PREF);
headers.put("Authorization", "Bearer " + accesstoken);
return headers;
}
}

您可以扩展 JsonRequest 类并覆盖 getHeaders() 方法。在队列中添加 volley 请求时传递 CustomJsonRequest 对象的实例。

VolleyUtils.getInstance().addToRequestQueue(customJsonRequest); 

关于java - Volley 使用单例将访问 token 附加到每个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49284158/

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