在我的应用程序中,我使用排球非常多次,每次我需要创建类,因为不同的参数。
有没有办法多次重复使用不同的参数?
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);
如何处理?
随时提出任何问题。
答案 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
}
});