Перезагрузить список при получении данных из сети - PullRequest
0 голосов
/ 07 ноября 2011

Я получаю каждые 30 секунд данные из сети.Проблема в том, что данные из списка не обновляются.Я использую этот код:

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

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Вы выполняете сетевой запрос в потоке пользовательского интерфейса - который вызовет ANR, если запрос занимает слишком много времени. Сделайте Http-материал в создаваемом вами потоке, а затем обновите представление списка внутри вызова runOnUIThread .. или, альтернативно, используйте AsyncTask

0 голосов
/ 07 ноября 2011

Попробуйте это:

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