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

                            }
                   });

并填充列表视图:

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

我从列表视图的网络数据中获取,但它没有显示在屏幕上。请帮助..我花了很多时间来做这个:(

这是我的播放列表数组:

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");
                    }
                }
4

2 回答 2

1

您正在 UI 线程上执行网络请求 - 如果请求时间过长,这将导致 ANR。在您创建的线程中执行 Http 操作,然后在 runOnUIThread 调用中更新列表视图。或者使用AsyncTask

于 2011-11-07T16:24:49.773 回答
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();
}
于 2011-11-07T13:17:52.463 回答