0
WebAPIとトークン認証を使用するようにアプリケーションを変換しようとしています。私はApache httpから離れ、ボレーを使用しています。Volley java.lang.UnsupportedOperationException
以下、ボレーのリクエストを処理するNetworkManagerというクラスがあります。 私の主なアクティビティには、networkManagerクラスからメソッドgetAuthenicationTokensを呼び出すログインボタンがあります。私はcustomeListenerを使用して、呼び出しアクティビティに応答を戻しました。
CustomListener:
public interface CustomListener<T>
{
public void getResult(T object);
}
。
活動:
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
NetworkManager.getInstance().getAuthenticationTokens(null, new CustomListener<JSONObject>()
{
@Override
public void getResult(JSONObject result)
{
Log.e(TAG, "Json object length = " + result.length());
}
});
。 NetworkManagerの中
方法:
public void getAuthenticationTokens(Object param1, final CustomListener<JSONObject> listener)
{
//String url = prefixURL + "this/request/suffix";
String url = "https://lw.xxx.co.uk/connect/token";
Map<String, Object> jsonParams = new HashMap<>();
jsonParams.put("scope", "openid email phone profile offline_access roles");
jsonParams.put("resource", "window.location.origin");
jsonParams.put("grant_type", "password");
jsonParams.put("username", "[email protected]");
jsonParams.put("password", "tempPxxx");
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(jsonParams),
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response)
{
Log.d(TAG + ": ", "somePostRequest Response : " + response.toString());
if(null != response.toString())
listener.getResult(response);
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
if (null != error.networkResponse)
{
Log.d(TAG + ": ", "Error Response code: " + error.networkResponse.statusCode);
listener.getResult(null);
}
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> params = super.getHeaders();
if(params==null)params = new HashMap<>();
params.put("Content-Type","application/x-www-form-urlencoded");
//..add other headers
return params;
}
};
requestQueue.add(request);
}
。
次の投稿(サブハッシュによる回答)を使用してリクエストにヘッダーを追加しようとしましたが、ヘッダーの追加から次の例外が発生しています。
例外:
NetworkDispatcher.run: Unhandled exception java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException
at java.util.AbstractMap.put(AbstractMap.java:203)
at loneworker.carefreegroup.com.loneworker.NetworkManager$3.getHeaders(NetworkManager.java:100)
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:93)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
。
ヘッダーを追加することでどのような問題が発生しているのか誰にでも分かります。 例外がライン100上で、ここでは
params.put("Content-Type","application/x-www-form-urlencoded");
このエラーは、super.getHeaders()を変更できず、新しいHashMapでコピーしてから追加しようとしているようです。 –
@RC。こんにちは私はちょうどMap params = new HashMap <>();を試してみました。 params.put( "Content-Type"、 "application/x-www-form-urlencoded");しかし、それはまだ動作しません。それはどういう意味ですか? –
turtleboy