2011-11-07 60 views
0

我每30秒收到一次网络数据。问题是来自listview的数据不会令人耳目一新。我的用户验证码:从网络接收数据时重新加载列表查看

t = new Timer(); 
     t.scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
       doReload1(); 

      } 
     }, 300, 30000); 

public void doReload1() { 

       runOnUiThread(new Runnable(){ 
          public void run() { 
           System.out.println("Every 30 sec getPlaylist"); 

           try { 
            HttpClient httpclient = new DefaultHttpClient(); 
            String link = "http://test.res-novae.fr/sfr/imalive.php?device_key=" 
              + deviceId + "&device_type=9"; 
            System.out.println("trimit " + link); 
            HttpPost httppost = new HttpPost(link); 
            try { 
             httpclient.execute(httppost); 
             GetPlaylists(); 

             System.out.println("getplaylist"); 

            } catch (ClientProtocolException e) { 

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

          } 
        }); 

和填充ListView:

if (playlists.length != 0) { 
      MyListView = (ListView) findViewById(R.id.MyListView); 
      adapter1 = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, playlists); 

      MyListView.setAdapter(adapter1); 
} 

我从列表视图网络数据获取,但它并不显示在屏幕上。 Plase help..I花了大量的时间与此:(

这里是我的播放列表数组:

try { 

       HttpResponse response = httpclient.execute(httppost); 

       /* Checking response */ 
       if (response != null) { 
        String responseBody = EntityUtils.toString(response 
          .getEntity()); 
        System.out 
          .println("Rezultat de la server :" + responseBody); 

        String jsonString = responseBody.toString(); 
        JSONObject jsonObject = new JSONObject(jsonString); 

        jArray = jsonObject.getJSONArray("_playLists"); 

        playlists = new String[jArray.length()]; 
        idPlaylist = new String[jArray.length()]; 
        timerPlaylist = new String[jArray.length()]; 

        for (int i = 0; i < jArray.length(); i++) { 

         JSONObject jsdata = jArray.getJSONObject(i); 
         String id = jsdata.getString("id_playlist"); 
         String namePlaylist = jsdata.getString("name"); 
         String timer = jsdata.getString("timer"); 
         System.out.println("Name playlist" + namePlaylist); 
         playlists[i] = namePlaylist; 
         idPlaylist[i] = id; 
         timerPlaylist[i] = timer; 
        } 

        for (int i = 0; i < jArray.length(); i++) { 
         System.out.println("playlists : " + playlists[i] +"\n"); 
        } 
       } 
+0

它看起来不像e刷新问题。当您设置适配器时,是否在控制台上登录了数组playLists的内容? – jptsetung

+0

是的,它具有核心数据。来自web的结果如下所示:{“_playLists”:[{“id_playlist”:“33”,“name”:“SFR Demo”,“timer”:“2”}, { “id_playlist”: “49”, “名称”: “Second'playlist”, “定时器”: “1”},{ “id_playlist”: “50”, “名称”: “TREI”, “定时器”:” 1“}]}和playLists包含”SFR演示“,”第二个播放列表“,”trei“ – Gabrielle

+0

您可以在创建适配器之前尝试覆盖playLists。例如,在创建适配器之前添加此行。 String [] playlists = new String [] {“Item0”,“Item1”,“Item3”}; – jptsetung

回答

0

试试这个:

if (playlists.length != 0) { 
      MyListView = (ListView) findViewById(R.id.MyListView); 
      adapter1 = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, playlists); 

      MyListView.setAdapter(adapter1); 
      adapter1.notifyDataSetChanged(); 
} 
+0

没有什么改变... listview不更新。我试着调用adapter1.notifyDataSetChanged();到很多地方,但没有什么改变 – Gabrielle

+0

你正在下载歌曲每隔30秒。直到然后,listview可能不会得到完全更新导致UI stick.so你无法看到更新。现在,每2分钟做一次。这样,listview可以获得更新的时间,并且您可以看到更改。 – Hiral

+0

有没有歌曲......只是某些播放列表的名称,间隔时间必须是30秒 – Gabrielle

1

你正在做的一个网络请求UI线程 - 如果请求时间太长,会导致ANRs,在你制作的线程中执行Http,然后更新runOnUIThread调用中的列表视图。或者使用AsyncTask