Автообновление ListView с изображением и текстом, используя Volley Json Mysql - PullRequest
0 голосов
/ 02 октября 2018

Я сделал несколько лет назад приложение для Android-радио (api 8), которое воспроизводит онлайн-радиостанцию ​​и отображает информацию, поступающую из базы данных mysql. Я использовал xml для отображения информации в Text и ImageView и обновлял данные с помощьюtimer

Теперь я хочу обновить свое приложение до api 15 после того, как какое-то время находился в автономном режиме, но saxparser больше не работает на api 15, поэтому я последовал руководству и обновил свое приложение с помощью списка рассылки json и customlistadapter

Только сейчас я не знаю, как автоматически обновлять информацию "сейчас играет".Я пробовал много вещей, искал много учебников, но я все еще не могу понять, как добиться этого с моим новым кодом.

Это был мой старый код, который работал с saxparser:

private class UpdateTimeTask implements Runnable {

        @Override
        public void run() {

            try {
                SAXParserFactory saxPF = SAXParserFactory.newInstance();
                SAXParser saxP = saxPF.newSAXParser();
                XMLReader xmlR = saxP.getXMLReader();

                URL url = new URL(
                        "http://www.example.com/linktodata.php");
                XMLHandler myXMLHandler = new XMLHandler();
                xmlR.setContentHandler(myXMLHandler);
                xmlR.parse(new InputSource(url.openStream()));

                data = XMLHandler.data;

                for (int i = 0; i < data.getTitle().size(); i++) {
                    Lyrics.setText(data.getLyric().get(i));
                    myimageURL = data.getPic().get(i);

                    Song.setText(data.getTitle().get(i));
                    Song.setTextColor(Color.parseColor("#7cfc00"));

                    frAlbum.setTextColor(Color.parseColor("#cd853f"));

                    Artist.setText(data.getArtist().get(i));
                    Artist.setTextColor(Color.parseColor("#000000"));

                    Album.setText(data.getAlbum().get(i));
                    Album.setTextColor(Color.parseColor("#ff0000"));

                    nowplaying.setText("Now Playing...");
                    nowplaying.setTextColor(Color.parseColor("#cd853f"));
                }
                downloadFile(myimageURL);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        Bitmap bmImg;

        void downloadFile(String fileUrl) {
            URL myFileUrl = null;
            try {
                myFileUrl = new URL(fileUrl);
                HttpURLConnection conn = (HttpURLConnection) myFileUrl
                        .openConnection();
                conn.setDoInput(true);
                conn.connect();
                InputStream is = conn.getInputStream();
                bmImg = BitmapFactory.decodeStream(is);

                if (bmImg != null) {
                    AlbumPic.setImageBitmap(bmImg);
                    AlbumPic.clearAnimation();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            m_handler.postDelayed(m_updateTime, DELAY);
            // timer end
        }
    }

Это то, что у меня сейчас.

Музыкальный объект Данные:

public class Music {
    private String title;
    private String lyrics;
    private String album;
    private String artist;
    private String thumbnailUrl;


    public Music() {
    }

    public Music(String title, String thumbnailUrl, String lyrics, String album, String artist)
    {
        this.title = title;
        this.thumbnailUrl = thumbnailUrl;
        this.lyrics = lyrics;
        this.album = album;
        this.artist = artist;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String name) {
        this.title = name;
    }

    public String getThumbnailUrl() {
        return thumbnailUrl;
    }

    public void setThumbnailUrl(String thumbnailUrl) {
        this.thumbnailUrl = thumbnailUrl;
    }

    public String getLyrics() {
        return lyrics;
    }

    public void setLyrics(String lyrics) {
        this.lyrics = lyrics;
    }

    public String getAlbum() {
        return album;
    }

    public void setAlbum(String album) {
        this.album = album;
    }

    public String getArtist() {
        return artist;
    }

    public void setArtist (String artist) {
        this.artist = artist;
    }

}

Надеюсь, кто-нибудь может мне помочь.Это последний шаг, чтобы закончить приложение.

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете достичь этого таким образом.
Возьмите boolean в вашем классе Music, чтобы делать вещи.Присвойте ему true, когда вы их сыграете, и все остальное станет false.
Теперь проверьте, что boolean в вашем CustomListAdapter классе адаптеров.
Если это правда, тогда покажите свой Now Playing информационный текст, иначе скрывайте его.

Не забыли сделатьвсе остальные boolean - false, когда вы присваиваете true конкретному и вызываете adapter.notifyDataSetChanged() после него.

Итак, ваш код выглядит следующим образом ...

public class CustomListAdapter extends BaseAdapter {

     ...

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ...

        // getting music data for the row
        Music m = musicItems.get(position);

        ...

        if(m.getIsPlaying())
           -show playNow text.
        else
           -hide it.

        ...

        return   convertView;
    }

}



Класс музыкального объекта выглядит следующим образом.

public class Music {
    ...
    private boolean isPlaying;

    public Music() {
    }

    public Music(String title, String thumbnailUrl, String lyrics, String album, String artist, boolean isPlaying)
    {
        this.title = title;
        this.thumbnailUrl = thumbnailUrl;
        this.lyrics = lyrics;
        this.album = album;
        this.artist = artist;
        this.isPlaying = isPlaying.
    }

    ...

    public String getIsPlaying() {
        return isPlaying;
    }

    public void setIsPlaying(boolean isPlaying) {
        this.isPlaying = isPlaying;
    }

}
...