通过 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();
}

希望对您有所帮助