拜托,我不知道在哪里添加/编辑超时和重试策略。基本上我有3秒。超时,rety策略设置为零。
我正在使用一个在web上找到的模式。
Controller.java
public class Controller extends Application {
/**
* Log or request TAG
*/
public static final String TAG = "VolleyPatterns";
/**
* Global request queue for Volley
*/
private RequestQueue mRequestQueue;
@Override
public void onCreate() {
super.onCreate();
}
/**
* @return The Volley Request queue, the queue will be created if it is null
*/
public RequestQueue getRequestQueue() {
// lazy initialize the request queue, the queue instance will be
// created when it is accessed for the first time
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
/**
* Adds the specified request to the global queue, if tag is specified
* then it is used else Default TAG is used.
*
* @param req
* @param tag
*/
public <T> void addToRequestQueue(Request<T> req, String tag) {
// set the default tag if tag is empty
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
VolleyLog.d("Adding request to queue: %s", req.getUrl());
getRequestQueue().add(req);
}
/**
* Adds the specified request to the global queue using the Default TAG.
*
* @param req
* @param tag
*/
public <T> void addToRequestQueue(Request<T> req) {
// set the default tag if tag is empty
req.setTag(TAG);
getRequestQueue().add(req);
}
/**
* Cancels all pending requests by the specified TAG, it is important
* to specify a TAG so that the pending/ongoing requests can be cancelled.
*
* @param tag
*/
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}
BaseController。Java语言
public class BaseController extends Controller {
/**
* A singleton instance of the application class for easy access in other places
*/
private static Controller sInstance;
private static String mToken = null;
@Override
public void onCreate() {
super.onCreate();
// initialize the singleton
sInstance = this;
}
public static void setMtoken(String token){
mToken = token;
}
public static String getMtoken(){
return mToken;
}
/**
* @return ApplicationController singleton instance
*/
public static synchronized Controller getInstance() {
return sInstance;
}
}
CustomRequest.java
public class CustomRequest extends Request<JSONObject> {
private Response.Listener<JSONObject> listener;
private Map<String, String> params;
public CustomRequest(String url, Map<String, String> params,
Response.Listener<JSONObject> reponseListener, Response.ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
public CustomRequest(int method, String url, Map<String, String> params,
Response.Listener<JSONObject> reponseListener, Response.ErrorListener errorListener) {
super(method, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
@Override
protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
return params;
};
@Override
protected void deliverResponse(JSONObject response) {
listener.onResponse(response);
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
}
最后,这是一个真正的API调用:
public void login(final VolleyCallback<String> callback, String username, String password) {
HashMap<String, String> params = new HashMap<String, String>();
params.put("username", username);
params.put("password", password);
CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST,
API_URL_LOGIN, params,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray account = response.optJSONArray("account");
if (account!=null) {
account = response.getJSONArray("account");
JSONObject account2 = account.getJSONObject(0);
String token = account2.getString("token");
if (token!="null" && token!=null && token!="" && !token.isEmpty()) {
callback.onSuccess(token);
} else {
// token doens't set
String result = "NO_TOKEN";
callback.onSuccess(result);
}
} else {
// WRONG PASSWORD
String result = "WRONG_PASSWORD";
callback.onSuccess(result);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError response) {
if(response instanceof NoConnectionError) {
/*
showDialog(LoginActivity.this,
LoginActivity.this.getString(R.string.title_no_internet_connection),
LoginActivity.this.getString(R.string.message_no_internet_connection));*/
}
}
});
// add the request object to the queue to be executed
BaseController.getInstance().addToRequestQueue(jsObjRequest);
}
您可以在将请求添加到队列之前为其设置重试策略
jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
3000,
0,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
//Adding the request to queue
BaseController.getInstance().addToRequestQueue(jsObjRequest);
这个堆栈溢出问题将对您有所帮助。
我在Android上使用Volley作为网络库。我在使用时遇到了“功能受限”的问题。它似乎是一个非常有用的类,带有缓存和其他功能,所以我想继续使用它。但是,它不允许访问它创建的对象。结果,我不能做一些在其他情况下可以做的事情(比如在请求上设置一个标记以将其从队列中取消)。 我当前的问题是-如何对使用发出的请求设置重试策略?
下面是execute()方法所做的事情
问题内容: 我正在研究一个人工智能项目,这是一个逻辑游戏,目标是两个用户连接到网络上充当管理员的服务器,然后开始一个人玩。 为了创建连接,我有一个服务器代码,它只是在localhost:8000上侦听,并在客户端到达时为他们分配团队值。连接后,客户端可以在管理员的控制下移动。 问题是,当我尝试将代码放入浏览器中时,它将失败并显示以下错误: 即使我创建了自己的策略,也要首先仅向我的项目文件夹()
在RetryTemplate里面,执行excuter方法是重试还是失败是由RetryPolicy决定的,这也是一个RetryContext工厂.这个RetryTemplate有责任使用当前的策略创建一个RetryContext并且把它注入到RetryCallback在每一次尝试中。回调失败后RetryTemplate必须由RetryPolicy决定使其更新状态(存储在RetryContext中),
我有以下步骤在批处理工作。 当某个异常抛出时,我在parseStepSkipListener中捕捉他并登录数据库。 我期待以下行为: 作业已启动 执行前面的步骤 开始执行解析步骤 阅读项目 进程项 写 哦,异常。 捕获异常,登录数据库,转到下一个块(读取、处理、写入)。 作业已启动 执行前面的步骤 开始执行解析步骤 阅读项目 进程项 写 哦,异常。 进程项 写入项 哦,异常。 捕获异常,登录数据库
试图将1000个观测(目前持续时间相同)安排在500个时隙中,因此只有一半适合。使用规划实体“观察”和可空的规划变量“timeslot”。表示为ConstraintStream的约束 null 调查结果 将501个观察值调度到500个时隙中,在16s后以0hard/-1medium终止。这是意料之中的。 调度1000个观测到500个时隙在10m后终止,-499hard/-1medium。这完全出乎