2017-12-31 26 views
0

私は自分のAndroidアプリでトークン化を実装しようとしています。そのために、いつでも私がサーバーにアクセスするたびに承認ヘッダーをリクエストに追加する必要があります。問題は、私は要求が行われた場合でも、サーバーインスタンスをデバッグするとき、ここでAndroidのバレー:ヘッダーが添付されていません

はauth_token_stringが(nullの場合、私はすでに検証済み私のコード

private void syncDatabases() 
{ 
    String tag_json_obj = "json_obj_req"; 
    String uri = "random_url"; 
    final ProgressDialog pDialog = new ProgressDialog(this); 
    pDialog.setMessage("Please wait while syncing"); 
    pDialog.show(); 

    List<Plane> allPlane = service.gettAllPlane(); 
    Gson gson = new Gson(); 
    JSONArray jsArray = new JSONArray(); 

    for (Plane p : allPlane) 
    { 
     String jsonString = gson.toJson(p); 
     try { 
      JSONObject obj = new JSONObject(jsonString); 
      obj.remove("ID"); 
      jsArray.put(obj); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    JsonArrayRequest jsonObjReq = new JsonArrayRequest(Request.Method.POST, uri, jsArray, new Response.Listener<JSONArray>() 
    { 
     @Override 
     public void onResponse(JSONArray response) 
     { 
      ArrayList<Plane> newList = new ArrayList<>(); 
      try 
      { 
       for(int i=0;i<response.length();i++) 
       { 
        String planeName,planeEngine,planeProducer,planeCountry,planeYear,wikiLink,ID; 
        JSONObject pl = response.getJSONObject(i); 

        String p1 = pl.optString("ID"); 
        if (pl != null && !p1.isEmpty()) 
         ID = pl.getString("ID"); 
        else 
         ID = "0"; 

        String p2 = pl.optString("planeName"); 
        if (p2 != null && !p2.isEmpty()) 
         planeName = pl.getString("planeName"); 
        else 
         planeName = ""; 

        String p3 = pl.optString("planeEngine"); 
        if (p3 != null && !p3.isEmpty()) 
         planeEngine = pl.getString("planeEngine"); 
        else 
         planeEngine = ""; 

        String p4 = pl.optString("planeProducer"); 
        if (p4 != null && !p4.isEmpty()) 
         planeProducer = pl.getString("planeProducer"); 
        else 
         planeProducer = ""; 

        String p5 = pl.optString("planeCountry"); 
        if (p5 != null && !p5.isEmpty()) 
         planeCountry = pl.getString("planeCountry"); 
        else 
         planeCountry = ""; 

        String p6 = pl.optString("planeYear"); 
        if (p6 != null && !p6.isEmpty()) 
         planeYear = pl.getString("planeYear"); 
        else 
         planeYear = "0"; 

        String p7 = pl.optString("wikiLink"); 
        if (p7 != null && !p7.isEmpty()) 
         wikiLink = pl.getString("wikiLink"); 
        else 
         wikiLink = ""; 

        Plane plf = new Plane(Integer.parseInt(ID),planeName,planeEngine,planeProducer,planeCountry,Integer.parseInt(planeYear),wikiLink); 
        newList.add(plf); 
       } 
      } 
      catch (JSONException e) 
      { 
       e.printStackTrace(); 
      } 

      service.deleteAllFromPlane(); 
      for (Plane p : newList) 
      { 
       boolean ok = service.addNewPlane(p); 
      } 
      pDialog.dismiss(); 
      tab1.onIorU(); 

     } 

    }, new Response.ErrorListener() 
    { 
     @Override 
     public void onErrorResponse(VolleyError error) 
     { 
      Log.e("ERROR", "Error occurred ", error); 
      pDialog.dismiss(); 
     } 
    }) 
    { 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError 
     { 
      SharedPreferences settings = PreferenceManager 
        .getDefaultSharedPreferences(MainActivity.this); 
      String auth_token_string = settings.getString("token", ""); 

      Map<String, String> params = new HashMap<>(); 
      params.put("Content-Type", "application/json; charset=UTF-8"); 
      params.put("Authorization", auth_token_string); 
      return params; 
     } 
    }; 

であることをそれに添加しないAuthorizationヘッダがないことですそうではない)。ここで enter image description here

そして、ここでは、私は、ヘッダーを取得する方法である私は(C#のWeb API 2サーバー)サーバー側に表示されるものです:あなたはトークンIの一部を見ることができますPICで

var authorization = request.Headers.Authorization; 

ヘッダーフィールドで送信しようとします。私は間違って何をしていますか?ありがとうございました。

+0

「getHeaders()」メソッドがあります。しかし、それは決して呼び出されません。ヘッダーはどこに付いていますか? – Doomsknight

+0

それは自動的に呼び出されます(そこにブレークポイントを追加すると、ブレークポイントがトリガーされます)。また、ヘッダーセクションに投稿した画像にトークンが何らかの形で追加されているのがわかります)。 – Artyomska

+0

要求の値をハードコーディングしてみてください。これはあなたがuiから文字列を取得できるかどうかを判断するのに役立ちます。コードが正しいように見えます。また、params.put( "Content-Type"、 "application/json; charset = UTF-8")を削除してから試してみてください。 – Sree

答えて

1

承認トークンにあなたがいません。承認の種類。私はあなたがBacisの認証を使用していることをお伝えしていますので、これを試してみてください:

params.put("Authorization", "Basic " + auth_token_string); 
+0

それが問題でした。ありがとうございました :) – Artyomska