使用不同参数多次使用凌空(面向对象)

时间:2017-08-28 06:18:27

标签: android android-volley object-oriented-analysis

在我的应用程序中,我使用排球非常多次,每次我需要创建类,因为不同的参数。

有没有办法多次重复使用不同的参数?

 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个参数或者我传递的任何参数。

假设我有一个帖子发布2个params,如:

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

和另外一个三个参数如下:

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

如何处理?

随时提出任何问题。

1 个答案:

答案 0 :(得分: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", "abc@gmail.com");

            createRequest(stringParams, listener, errorListener);
        }
        if (serviceCode == ConstantsLib.SIGN_UP_REQUEST)
        {
            HashMap<String, String> stringParams = new HashMap<>();
            stringParams.put("password", "123456");
            stringParams.put("email", "abc@gmail.com");
            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
        }
        });