2017-08-28 64 views
1

在我的應用程序中,我使用非常多的次數,每次我需要創建類,因爲不同的參數。使用不同的參數多次抽取(面向對象)

有沒有辦法重複使用不同的params多次?

private void sendReservation(String url) { 


    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        try { 
         JSONObject jsonObject = new JSONObject(response); 


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

        } 


       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError volleyError) { 

       } 
      }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      //Creating parameters 
      Map<String, String> params = new Hashtable<String, String>(); 
      //Adding parameters 
      User user = prefManager.getUser(); 
      params.put("id", Id); 

      return postParams.checkParams(params); 
     } 
    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
    int x = 0;// retry count 
    stringRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48, 
      x, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
    requestQueue.add(stringRequest); 
} 

上面我用類似的請求,它有相同的參數。

我需要的是重複使用相同的方法sendReservation()與超過1個參數或什麼params我通過。

假設我有一個線程後2個PARAMS,如:

params.put("id", Id); 
params.put("name", name); 

和另一個崗位3個PARAMS,如:

params.put("id", Id); 
    params.put("name", name); 
params.put("type", type); 

如何處理這個問題?

隨時問任何問題。

+0

你的意思是'sendReservation(字符串URL,最後絃樂ID)'?或者'sendReservation(String url,final Map params)' –

+0

@ cricket_007不,我的意思是,如果我有超過1個參數,並且我需要使用同一個類,我必須做什麼? –

+0

看看這個:https://stackoverflow.com/questions/35628142/how-to-make-separate-class-for-volley-library-and-call-all-method-of-volley-from我希望這可以幫助您。 –

回答

0

這已經是Volley提供的簡化代碼,至少你在調用任何服務時必須設置參數。

但是仍然可以創建一個控制器類,您將發送一個serviceCode(由任何唯一編號創建)並根據serviceCode在控制器類和調用服務中創建您的參數。

在這種情況下,你只需要寫兩行代碼。

例如,

ServiceController controller = new ServiceController(context); 
controller.call(SERVICE_CODE, responseListner); 

以上只是調用控制器類的示例代碼。

編輯

這裏是完整的代碼,將幫助你。

創建ServiceController

import android.content.Context; 

import com.android.volley.DefaultRetryPolicy; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 
import com.cdnsol.interfaces.ConstantsLib; 
import com.cdnsol.interfaces.UrlConstants; 

import org.json.JSONObject; 

import java.util.HashMap; 

/** 
* Created by vishalchhodwani on 28/8/17. 
*/ 
public class ServiceController { 

    Context context; 

    public ServiceController(Context context) 
    { 
     this.context = context; 
    } 

    public void call(int serviceCode, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) 
    { 
     if (serviceCode == ConstantsLib.LOGIN_REQUEST) 
     { 
      HashMap<String, String> stringParams = new HashMap<>(); 
      stringParams.put("password", "123456"); 
      stringParams.put("email", "[email protected]"); 

      createRequest(stringParams, listener, errorListener); 
     } 
     if (serviceCode == ConstantsLib.SIGN_UP_REQUEST) 
     { 
      HashMap<String, String> stringParams = new HashMap<>(); 
      stringParams.put("password", "123456"); 
      stringParams.put("email", "[email protected]"); 
      stringParams.put("name", "abc"); 

      createRequest(stringParams, listener, errorListener); 
     } 
    } 

    private void createRequest(HashMap<String, String> params, Response.Listener<JSONObject> responseListener, Response.ErrorListener errorListener) 
    { 
     try 
     { 
      NetworkRequest networkRequest = new NetworkRequest(context, UrlConstants.LOGIN_URL, params, 
        true, responseListener, errorListener); 

      RequestQueue requestQueue = Volley.newRequestQueue(context); 
      int x = 0;// retry count 
      networkRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48, 
        x, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
      requestQueue.add(networkRequest); 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 

現在打電話從活動或片段您服務

ServiceController controller = new ServiceController(LoginActivity.this); 
controller.call(ConstantsLib.LOGIN_REQUEST, new Response.Listener<JSONObject>() { 
@Override 
public void onResponse(JSONObject response) { 

     // Handle Response 
     } 
     }, 

     new Response.ErrorListener() { 
@Override 
public void onErrorResponse(VolleyError error) { 

     // Handle Error 
     } 
     }); 
相關問題