2016-05-15 5 views
0

を返す私はバレーボールの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()をオーバーライドしましたが、同じ結果が得られました。

+0

URLが有効かどうかを確認してください。 –

+0

URLが動作しています...ヘッダー(ログインなど)を必要としないリクエストは完全に正常に動作します。 – kimv

答えて

0

401エラーはリクエストが不正であることを意味します。これは、あなたのトークンが有効でない可能性が高いことを意味します。 Profile.getInstance()。getToken()を確認して、それが何であるかを確認してください。また、レスポンスクライアントを使用してネットワーク応答を確認することもできます。 あなたによれば、"(ログインなどの)ヘッダーを必要としないリクエストは完全に正常に動作します"これは大部分が自分の主張を裏付けます。

0

私はそれを解決しました。私は "token"を "Authorization"に置き換えました。クラスはうまく動作します。

関連する問題