2017-11-20 19 views
-1

私は匿名の内部クラスを使用するメソッドを使用してWeb呼び出しをしようとしています。 Web呼び出しの結果を内部クラスの外で宣言された変数に代入することはできません。匿名の内部クラスの中で最終変数を設定

私はWeb呼び出しメソッドの呼び出しを破棄した場合、内部クラスはもはや存在しない変数への参照を持っているため、変数を最終的にする必要があることを理解しています。

コンパイラが明記されています

cannot assign value to final variable 'result' 

を誰もが結果変数にwebcallの結果を割り当てることが私の回避策を教えてください。メソッドが戻った後

あなたはクラスのインスタンス変数(または方法の少なくとも外側のスコープとして resultを宣言する必要が
public String makeWebApiPost(AppObj appObj, String url, JSONObject jsonObject) { 

     Log.e(TAG, "inside makeWebApiPost. url = " + url + " JSONObject = " + jsonObject.toString()); 


     final String result; 



     String accessToken = appObj.dbModel.getAccessTokenFromDB(); 
     String refreshToken = appObj.dbModel.getRefreshTokenFromDB(); 

     if (! accessToken.equalsIgnoreCase("NO_ACCESSTOKEN")) { 

      Log.e(TAG, "we have access tokens"); 


      StringRequest request = new StringRequest(Request.Method.POST, url, 
        new Response.Listener<String>() 
        { 
         @Override 
         public void onResponse(String response) { 
          // response 
          Log.e("Response", response); 


          try { 


           JSONObject obj = new JSONObject(response); 
           Log.e(TAG, "JSON obj from get tokens = " + obj.toString()); 

           result = obj.toString(); 





          }catch (Exception e){} 

         } 
        }, 


        new Response.ErrorListener() 
        { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          // error 
          Log.e("Error.Response", error.networkResponse.toString()); 
          listener.getResult(null); 
         } 
        } 
      ) { 



      /* @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 


       Map<String,String> params = new HashMap<>(); 
       params.put("Content-Type","application/x-www-form-urlencoded"); 
       //..add other headers 
       return params; 
      }*/ 


       @Override 
       public String getBodyContentType() { 
        return "application/x-www-form-urlencoded"; 
       } 

       @Override 
       protected Map<String, String> getParams() 
       { 
        Map<String, String> params = new HashMap<String, String>(); 
        params.put("scope", "openid email phone profile offline_access roles"); 
        params.put("resource", "https://lw.xxx.co.uk"); 
        params.put("grant_type", "password"); 
        params.put("username", userName); 
        params.put("password", password); 


        return params; 
       } 


       @Override 
       protected VolleyError parseNetworkError(VolleyError response) { 


        try { 

         String json = new String(response.networkResponse.data, HttpHeaderParser.parseCharset(response.networkResponse.headers)); 
         Log.e(TAG, "reponse error = " + json); 

        }catch (Exception e){} 



        return super.parseNetworkError(response); 


       } 

      }; 

      requestQueue.add(request); 





     } 

     return null; 

    }//end of makeWebApiPost 

答えて

0

.... onResponseことができ、そしておそらく意志よりは、非同期的に呼び出されること。

関連する問題