通过 Volley 按时间间隔更新内容
Updating Content thru Volley at Time Intervals
我知道有很多人 post 这样做,但由于 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 请求一头雾水,这意味着我需要担心什么。就像我说的那样,经验不多,所以不确定我 运行 请求是否在特殊的 运行nable 或任务中。任何方向表示赞赏。
编辑:我修改了一些,而不是回到 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。现在我收到一条错误消息,指出 运行nableCode 需要声明为最终代码,因为它是从内部 class 访问的,对于处理程序也是如此。好吧,将 final 添加到
final Runnable runnableCode=new Runnable(){
行没有修复错误,我仍然有一个错误告诉我 运行nableCode 尚未初始化。我能得到一点帮助吗?
您没有为 运行 Volly 创建一个 Runnable。默认情况下,Volly 运行s 在后台线程上进行网络调用。
这是一个简单的 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)。
现在要使这段代码 运行 在所需的时间间隔之后,只需在倒数计时器的 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();
}
希望对您有所帮助
我知道有很多人 post 这样做,但由于 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 请求一头雾水,这意味着我需要担心什么。就像我说的那样,经验不多,所以不确定我 运行 请求是否在特殊的 运行nable 或任务中。任何方向表示赞赏。
编辑:我修改了一些,而不是回到 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。现在我收到一条错误消息,指出 运行nableCode 需要声明为最终代码,因为它是从内部 class 访问的,对于处理程序也是如此。好吧,将 final 添加到
final Runnable runnableCode=new Runnable(){
行没有修复错误,我仍然有一个错误告诉我 运行nableCode 尚未初始化。我能得到一点帮助吗?
您没有为 运行 Volly 创建一个 Runnable。默认情况下,Volly 运行s 在后台线程上进行网络调用。
这是一个简单的 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)。
现在要使这段代码 运行 在所需的时间间隔之后,只需在倒数计时器的 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();
}
希望对您有所帮助