2017-07-05 2 views
2

Im sehr neue auf Android aktualisieren. im so dass diese teturial aber ich habe ein Problem beim Aktualisieren und kann nicht verstehen, wie meine Listenansicht aktualisierenWie Android Android listview evry 10 Sekunden

 // 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); 

ich versuche, alle Methoden google ... aber kein Glück dieser notifyDataSetChanged() nicht funktioniert ...

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

Haben Sie wieder den Web-Service anfordern möchten Sie treffen? –

+0

Ja neue Anfrage und neue json mit neuen Artikeln – ctcp

+0

Sie können Timer verwenden, um Webservice nach 10s aufrufen und dann onResponse() aktualisieren Sie Ihre Listview –

Antwort

2

Setzen Sie Ihre Volley Anforderungscode innerhalb einer Methode, lassen Sie uns Namen id fetchData();

Dann Sie Ihren Dienst wieder aufrufen kann nach 10 Sekunden durch den folgenden Code:

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(); 

die Sie interessieren und lo lassen Sie mich wissen wenn irgendein Problem.

+0

adapter.getData(). Clear(); vor dem Refresh ich putze die Daten und ihre Arbeiten, bevor ich Schleife Danke – ctcp

+0

glücklich zu helfen, Happy Coding !! –

2

einen Handler und seine postDelayed Methode Verwenden der Liste der Adapter ungültig zu machen, wie folgt:

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

Sie nur UI in der Haupt (UI) Thread aktualisieren.

Durch Erstellen des Handlers im Hauptthread stellen Sie sicher, dass alles, was Sie an den Handler senden, auch im Hauptthread ausgeführt wird.

0

Verwenden Timer:

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