2017-07-05 19 views
2

我很新的Android。 IM使這個teturial,但我有刷新問題,無法理解如何刷新列表視圖我如何刷新Android的列表視圖埃夫裏10秒

 // Creating volley request obj 
    JsonArrayRequest movieReq = new JsonArrayRequest(url, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        Log.d(TAG, response.toString()); 
        hidePDialog(); 

        // Parsing json 
        for (int i = 0; i < response.length(); i++) { 
         try { 

          JSONObject obj = response.getJSONObject(i); 
          Movie movie = new Movie(); 
          movie.setTitle(obj.getString("title")); 
          movie.setThumbnailUrl(obj.getString("image")); 
          movie.setRating(((Number) obj.get("rating")) 
            .doubleValue()); 
          movie.setYear(obj.getInt("releaseYear")); 

          // Genre is json array 
          JSONArray genreArry = obj.getJSONArray("genre"); 
          ArrayList<String> genre = new ArrayList<String>(); 
          for (int j = 0; j < genreArry.length(); j++) { 
           genre.add((String) genreArry.get(j)); 
          } 
          movie.setGenre(genre); 

          // adding movie to movies array 
          movieList.add(movie); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 

        // notifying list adapter about data changes 
        // so that it renders the list view with updated data 
        adapter.notifyDataSetChanged(); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        VolleyLog.d(TAG, "Error: " + error.getMessage()); 
        hidePDialog(); 

       } 
      }); 


/** REFRESH HERE /** 

Thread t = new Thread() { 

     @Override 
     public void run() { 
      try { 
       while (!isInterrupted()) { 
        Thread.sleep(10000); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Log.e(TAG, "EVRY 10 SECOND START NOW "); 

          listView.invalidateViews(); 
          listView.refreshDrawableState(); 
          adapter.notifyDataSetChanged(); 

//        Log.e(TAG, String.valueOf(movieList)); 

          // fire the event 

         } 
        }); 
       } 
      } catch (InterruptedException e) { 
      } 
     } 
    }; 

    t.start(); 
    // Adding request to request queue 
    AppController.getInstance().addToRequestQueue(movieReq); 

我嘗試所有方法谷歌...但沒有運氣這notifyDataSetChanged()不工作...

listView.invalidateViews(); 
listView.refreshDrawableState(); 
adapter.notifyDataSetChanged(); 
+0

你想再次請求你打的web服務? –

+0

是提出新請求並獲得新項目的新json – ctcp

+0

您可以使用計時器在10秒後調用webservice,然後onResponse()刷新您的列表視圖 –

回答

2

把你亂射請求代碼的方法裏面,讓我們的名字ID fetchData();

然後,你可以打電話給你的服務後再次10秒下面的代碼:

final Handler mHandler = new Handler(); 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (true) { 
        try { 
         Thread.sleep(10000); 
         mHandler.post(new Runnable() { 

          @Override 
          public void run() { 
           // Write your code here to call the method. 
           fetchData(); 
          } 
         }); 
        } catch (Exception e) { 
         // TODO: handle exception here 
         e.printStackTrace(); 
        } 
       } 
      } 
     }).start(); 

試試這個,羅讓我知道如果有任何問題。

+0

adapter.getData()。clear();刷新之前我清理數據及其作品之前,我得到循環謝謝 – ctcp

+0

高興地幫助,快樂編碼! –

2

使用處理及其postDelayed方法如下無效列表中的適配器:

final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      adapter.notifyDataSetChanged(); 
      handler.postDelayed(this, 10 * 1000); 
     } 
    }, 10 * 1000); 

您只能在主(UI)線程更新UI。

通過在主線程中創建處理程序,確保您發佈到處理程序的所有內容都在主線程中運行。

0

使用定時器:

Timer timerAsync; 
TimerTask timerTaskAsync; 

timerAsync = new Timer(); 
     timerTaskAsync = new TimerTask() { 
      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         doWork(); 
        } 
       }); 
      } 
     }; 
     timerAsync.schedule(timerTaskAsync, 1000, 5000);// First Start 1 seconds 5 seconds repeat