我知道有很多帖子可以做到这一点,但由于Android体验有限,我很难相信谁应该相信。我有一个应用程序,通过Volley请求从我的服务器启动时加载内容。经过一段时间后,我想回到Volley请求,以更新显示给用户的内容。当应用程序首次加载时,我确定从传递给下一个
的半小时的秒数public static void refreshAllContent(final long timetoupdate) {
new CountDownTimer(timetoupdate, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
Log.i("SCROLLS ", "UPDATE CONTENT HERE ");
resetContent();
}
}.start();
}
在结束时,它调用了refreshAllContent,这是我要发出Volley请求并重置下次更新的计数,我有类似
的内容public static void resetContent(){
Handler handler= new Handler();
Runnable runnable= new Runnable() {
@Override
public void run() {
//PUT VOLLEY REQUEST HERE
refreshAllContent(Times. initialTime());
}
};
}
我想我对如何制作Volley请求感到困惑,这意味着我必须担心这一点。就像我说的不是很多经验所以不确定我是否在特殊的runnable或任务中运行请求。任何方向赞赏。
编辑:我重做了一些,而不是回到refreshAllContent,我用替换了它private static void resetContent(){
Log.i("SCROLLS ", "ENTER resetContent");
final Handler handler= new Handler();
Runnable runnableCode = new Runnable() {
@Override
public void run() {
refreshData(); // Volley Request
handler.postDelayed(runnableCode, 20000);
}
};
handler.post(runnableCode);
}
逻辑现在处于初始运行状态,第一个timetoupdate被创建并传递给refreshAllContent。倒计时完成后,将运行resetContent(),这将使refreshData()中的Volley Request成为可能。现在我收到一个错误,说明runnableCode需要被声明为final,因为它是从内部类访问的,对于处理程序也是如此。好吧,最后加入
final Runnable runnableCode=new Runnable(){
行没有修复错误,我仍然有一个错误告诉我runnableCode尚未初始化。我可以得到一些帮助。
答案 0 :(得分:1)
您没有创建Runnable来运行Volly。默认情况下,Volly在后台线程上运行网络调用。
这是一个简单的Volly代码:
public void volleyProcess(){
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest request = new StringRequest(Request.Method.GET, "https://api.myjson.com/bins/753rt", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
refreshAllContent(30000);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, error.toString());
}
});
requestQueue.add(request);
}
当调用成功返回响应时,将调用onResponse()。在主线程上调用此方法,因此您可以在此处运行refreshAllContent()方法。参数'response'是返回的数据,在这里做你想做的事情(我只是将它打印到Logcat)。
现在要在所需的时间间隔后运行此代码,只需在countdownTimer的onFinish()中调用它。
public static void refreshAllContent(final long timetoupdate) {
new CountDownTimer(timetoupdate, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
Log.i("SCROLLS ", "UPDATE CONTENT HERE ");
volleyProcess();
}
}.start();
}
希望这有帮助