在时间间隔内通过Volley更新内容

时间:2018-02-14 19:31:48

标签: android android-volley runnable

我知道有很多帖子可以做到这一点,但由于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尚未初始化。我可以得到一些帮助。

1 个答案:

答案 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();
}

希望这有帮助