Volley ile Bearer Token Authentication

Volley kütüphanesini kullanarak web servisten veri çeken arkadaşlar bearer token web api  ile çalışırken genelde 400 Bad Request hatası almaktadırlar. Bu hatayı zamanında almış ve hiç bir yerde çözümünü bulamayıp uzun zaman harcamış biri olarak sizinle düzgün çalışan kod örneğini paylaşmak istedim. Örnek kod yapısı aşağıdaki gibidir. Aşağıdaki kodlar örnek bir login girişi yaptığımız ekranın servis kodlarıdır.

 

 

[java]
public void getToken(final Activity activity, final String paramUsername, final String paramPassword) {
String tag_json_obj = "getToken";

final
String body = "username=" + paramUsername + "&password=" + paramPassword + "&grant_type=password";

StringRequest jsonObjReq = new StringRequest(Request.Method.POST,
WebUrls.getToken,
new Response.Listener<String>() {

@Override
public void onResponse(String strResponse) {
Log.d("RESPONSE", strResponse.toString());

JSONObject response;

try {
response = new JSONObject(strResponse);

if (strResponse.contains("error")) {
error = response.getString("error");
error_description = response.getString("error_description");

if (error.equals("invalid_grant")) {
Toast.makeText(context, error_description, Toast.LENGTH_LONG).show();
}
} else {

access_token = response.getString("access_token");
token_type = response.getString("token_type");
expires_in = response.getInt("expires_in");

Log.e("TOKEN", "Bearer " + access_token);
}

} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(context,
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}

}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("Error: " + error.getMessage());
SharedComponent.pDialog.hide();
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
Toast.makeText(context, error.getMessage(), Toast.LENGTH_LONG).show();
} else if (error instanceof AuthFailureError) {
Toast.makeText(context, error.getMessage(), Toast.LENGTH_LONG).show();
} else if (error instanceof ServerError) {
Toast.makeText(context, error.getMessage(), Toast.LENGTH_LONG).show();
} else if (error instanceof NetworkError) {
Toast.makeText(context, error.getMessage(), Toast.LENGTH_LONG).show();

} else if (error instanceof ParseError) {
Toast.makeText(context, error.getMessage(), Toast.LENGTH_LONG).show();

}

}

}) {

public byte[] getBody() throws AuthFailureError {

return body.getBytes();
}

@Override
public String getBodyContentType() {

return "application/x-www-form-urlencoded";
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Accept", "application/json");

return headers;
}

@Override
protected String getParamsEncoding() {
return "utf-8";
}
};

// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
}
[/java]