2017-08-28 8 views
1

私のアプリケーションでは、私はボレーを非常に多く使用し、異なるパラメータでクラスを作成する必要があるたびに使用します。異なるパラメータで複数回ボレーを使用する(オブジェクト指向)

異なるパラメータで複数回ボレーを再利用する方法はありますか?

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); 
} 

上記クラスiは、同じパラメータを持つ同様のリクエストで使用します。

私が必要とするのは、同じメソッドsendReservation()を1つ以上のパラメータで再利用することです。

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

など別のポスト3つのparams:

それをどのように処理するかを
params.put("id", Id); 
    params.put("name", name); 
params.put("type", type); 

は、私のような一つのスレッドポスト2つのparamsを持っていると仮定しますか?

お気軽に質問してください。

+0

から、あなたのサービスを呼び出しますか?または、1つ以上のparamsがあり、私は何をしなければならない同じクラスを使用する必要があるかどうかを、@ cricket_007いいえ、つまり、sendReservation(String url、final Map params) –

+0

@ cricket_007いいえ。 –

+0

これを見てください:https://stackoverflow.com/questions/35628142/how-to-make-separate-class-for-volley-library-and-call-all-method-of-volley-from君は。 –

答えて

0

これはすでにVolleyが提供するコードの縮小です。少なくとも、サービスを呼び出すときはparamsを設定する必要があります。

しかしでも、serviceCode(ここで作成された一意の番号)を送信し、serviceCodeに従ってコントローラークラスとコールサービスでパラメーターを作成するコントローラークラスを作成できます。

この場合、2行のコードしか書き込まないといけません。

例:

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(); 
     } 
    } 
} 

今、あなたは `sendReservation(文字列のURL、最終文字列ID)`を意味する活動又はその断片

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 
     } 
     }); 
関連する問題