java - 如何缩短关于 Stringrequest 的代码?
问题描述
我有一些从谷歌应用脚本接收数据的方法,但是为所有方法放置相同的代码有点长。
例如,这是我的 checkIn 方法,但我需要创建 checkOut 方法或 UpdateReservation 从谷歌中的 javascript 接收实际函数。有一种方法可以缩短这个 Volley Stringrequestcode。
或者至少我可以将这种编码或功能与firebase一起使用并且更容易吗?
private void checkIn() {
final RequestQueue requestQueue = Volley.newRequestQueue(Reservations.this);
final StringRequest stringRequest = new StringRequest(Request.Method.POST, "url",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
) {
@Override
protected Map<String, String> getParams() {
Map<String, String> parmas = new HashMap<>();
//here we pass params
parmas.put("action","checkIn");
return parmas;
}
};
int socketTimeOut = 50000;// u can change this .. here it is 50 seconds
RetryPolicy retryPolicy = new DefaultRetryPolicy(socketTimeOut, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(retryPolicy);
requestQueue.add(stringRequest);
}
});
}
解决方案
基本上,您需要一种更紧凑的方式来编写那段代码。我对么?
您可以使用 lambdas 以更紧凑的方式编写侦听器:
StringRequest request = new StringRequest(Request.Method.POST, "url",
(response) -> {
//Handle response
},
(error) -> {
//Handle error
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> parmas = new HashMap<>();
//here we pass params
parmas.put("action","checkIn");
return parmas;
}
};
如果getParams(...)
每种情况的方法只是action
向 params 映射添加一个键,您可以创建一个StringRequest
使用此功能扩展的类。
public class CustomStringRequest extends StringRequest {
private String action;
public CustomStringRequest(int method, String url, String action, Response.Listener listener, Response.ErrorListener el) {
super(method, url, listener, el);
this.action = action;
}
@Override
protected Map<String, String> getParams() {
Map<String, String> parmas = new HashMap<>();
//here we pass params
parmas.put("action", action);
return parmas;
}
}
然后在每种方法中,您可以按如下方式编写您的请求:
request = new CustomStringRequest(Request.Method.POST, "url", "checkIn",
(response) -> {
//Handle response
},
(error) -> {
//Handle error
});
请注意,“checkIn”类型的操作已被传递到CustomStringRequest
构造函数中!
所以最后你会得到这样的东西
private void checkIn() {
final RequestQueue requestQueue = Volley.newRequestQueue(Reservations.this);
final StringRequest stringRequest = new CustomStringRequest(Request.Method.POST, "url", "checkIn",
(response) -> {
//Handle response
},
(error) -> {
//Handle error
});
int socketTimeOut = 50000;// u can change this .. here it is 50 seconds
RetryPolicy retryPolicy = new DefaultRetryPolicy(socketTimeOut, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(retryPolicy);
requestQueue.add(stringRequest);
}
推荐阅读
- selenium - 如何制定测试自动化策略?
- sql - Analysis Services Power Query 编辑器性能
- r - 将数据框转换为矩阵
- vue.js - Vuetify 日期选择器:多个事件指示器
- python - R:R 相当于 numpy 的 .dtype.itemsize 和 .dtype.alignment 数组属性是什么?
- c# - 尝试检查不同工作站的友好操作系统名称
- python - 如果未定义字段,如何跳过渲染文件?
- sql - Oracle SQL - 将列转置为行的新表
- oracle - 包中的函数不返回日期,
- javascript - javascript循环改变其他对象的值