を返す私はバレーボールのStringRequestカスタムボレー要求クラスが常に401
public abstract class CustomRequest extends StringRequest {
private static final String TAG = CustomRequest.class.getSimpleName();
private Response.Listener<String> listener;
private HashMap<String, String> bodyParams, headerParams;
public CustomRequest(int method, String url, Response.Listener<String> responseListener,
Response.ErrorListener errorListener) {
super(method, url, responseListener, errorListener);
setTag(this.getClass().getSimpleName());
this.listener = responseListener;
this.bodyParams = new HashMap<>();
this.headerParams = new HashMap<>();
addHeaderParam("token", Profile.getInstance().getToken());
}
public void start(){
Log.i(this.getClass().getSimpleName(), "Request parameters---------------------->");
Log.d(this.getClass().getSimpleName(), "URL = " + getUrl());
Log.d(this.getClass().getSimpleName(), "headers = " + logParams(headerParams));
Log.d(this.getClass().getSimpleName(), "body = " + logParams(bodyParams));
Log.d(this.getClass().getSimpleName(), "method = " + getMethodAsString());
Log.i(this.getClass().getSimpleName(), "Starting request---------------------");
VolleyInstance.getInstance().addToRequestQueue(this);
}
private String getMethodAsString() {
switch (getMethod()){
case Method.DELETE:
return "delete";
case Method.DEPRECATED_GET_OR_POST:
return "deprecated get or post";
case Method.GET:
return "get";
case Method.HEAD:
return "head";
case Method.OPTIONS:
return "options";
case Method.PATCH:
return "patch";
case Method.POST:
return"post";
case Method.PUT:
return "put";
case Method.TRACE:
return "trace";
default:
return "method not found";
}
}
private String logParams(Map<String, String> params){
Iterator it = params.entrySet().iterator();
StringBuilder sb = new StringBuilder();
sb.append("{");
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
if(sb.length() != 1){
sb.append(", ");
}
sb.append(pair.getKey()).append(" = ").append(pair.getValue());
}
sb.append("}");
return sb.toString();
}
protected void addHeaderParam(String key, String value){
headerParams.put(key, value);
}
protected void addBodyParam(String key, String value){
bodyParams.put(key, value);
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headerParams;
}
@Override
protected Map<String, String> getParams()
throws AuthFailureError {
return bodyParams;
}
@Override
protected void deliverResponse(String response) {
Log.d(this.getClass().getSimpleName(), "Response = " + response.toString());
listener.onResponse(response);
}
@Override
public void deliverError(VolleyError error) {
super.deliverError(error);
error.printStackTrace();
if(!(error instanceof NoConnectionError)){
Crashlytics.logException(error);
}
}
を拡張し、このクラスを持っている私はこのようなCustomRequestを拡張:
public class GetLastFiveUpdatedLists extends CustomRequest {
private static final String URL_ADDITION = "/v1/list/lastFiveList";
public GetLastFiveUpdatedLists(Response.Listener<String> responseListener, Response.ErrorListener errorListener) {
super(Method.GET, Global.URL + URL_ADDITION, responseListener, errorListener);
}
そして、私はこのようにそれを呼び出す:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// code
new GetLastFiveUpdatedLists(this.generateResponseListener(), this.generateErrorListener()).start();
// code
return rootView;
}
問題は、私はいつもBasicNetwork.performRequestを取得することです:の予期しない応答コード。 APIが動作しているのは、iOSで正常に動作するためです。
また、StringRequestではなくJSONObjectRequestを拡張してgetHeaders()をオーバーライドしましたが、同じ結果が得られました。
URLが有効かどうかを確認してください。 –
URLが動作しています...ヘッダー(ログインなど)を必要としないリクエストは完全に正常に動作します。 – kimv