Android 앱에 토큰 화를 구현하려고하는데이를 위해 서버에 연결할 때마다 인증 헤더를 항상 요청에 추가해야합니다. 문제는 내가 서버 인스턴스를 디버깅 할 때, 요청이 이루어진 경우에도, 거기에 추가 권한 부여 헤더 (auth_token_string가 null의 경우Android Volley : 헤더가 추가되지 않았습니다.
여기가 이미 확인 내 코드
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;
}
};
이라고 없다는 것입니다 그렇지 않다). 저는 여기에 서버 측 (C# 웹 API 2 서버)에 표시되는 내용 여기
그리고 내가 헤더 얻는 방법이다 : 당신이 토큰의 일부를 볼 수 있습니다
var authorization = request.Headers.Authorization;
은 PIC에서를 I 헤더 필드를 보내보십시오. 내가 도대체 뭘 잘못하고있는 겁니까? 고맙습니다.
'getHeaders()'메서드를 참조하십시오. 그러나 결코 호출되지 않습니다. 헤더는 어디에 부착합니까? – Doomsknight
자동 호출됩니다 (거기에 중단 점을 추가하면 자동으로 트리거됩니다). 또한 토큰이 헤더 섹션에 게시 된 사진에 어떻게 든 추가되었다는 것을 볼 수 있습니다. – Artyomska
요청의 값을 하드 코딩 해보십시오. 이렇게하면 ui에서 문자열을 가져올 수 있는지 여부를 판단하는 데 도움이됩니다. 코드가 올바르게 보입니다. params.put ("Content-Type", "application/json; charset = UTF-8")을 제거한 후에도 시도해보십시오. – Sree