ANDROID - Using CursorLoader to get audios causes duplication of audios -


i building activity want populate audios using loader.

public class mainactivity extends baseactivity implements      loadermanager.loadercallbacks<cursor> {      private static final int internal_cursor_id = 0;     private static final int external_cursor_id = 1;      private arraylist<audio> audios = new arraylist<>();      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);         initloader();     }        private void initloader() {         try {            getsupportloadermanager().initloader(internal_cursor_id, null, this);            getsupportloadermanager().initloader(external_cursor_id, null, this);         } catch (securityexception e) {         } catch (illegalargumentexception e) {         }     }       private static final string[] internal_columns = new string[]{            mediastore.audio.media._id,            mediastore.audio.media.album,            mediastore.audio.media.artist,            mediastore.audio.media.composer,            mediastore.audio.media.data,            mediastore.audio.media.date_added,            mediastore.audio.media.date_modified,            mediastore.audio.media.display_name,            mediastore.audio.media.duration,            mediastore.audio.media.is_alarm,            mediastore.audio.media.is_music,            mediastore.audio.media.is_notification,            mediastore.audio.media.is_podcast,            mediastore.audio.media.is_ringtone,            mediastore.audio.media.mime_type,            mediastore.audio.media.size,            mediastore.audio.media.title     };      private static final string[] external_columns = new string[]{            mediastore.audio.media._id,            mediastore.audio.media.album,            mediastore.audio.media.artist,            mediastore.audio.media.composer,            mediastore.audio.media.data,            mediastore.audio.media.date_added,            mediastore.audio.media.date_modified,            mediastore.audio.media.display_name,            mediastore.audio.media.duration,            mediastore.audio.media.is_alarm,            mediastore.audio.media.is_music,            mediastore.audio.media.is_notification,            mediastore.audio.media.is_podcast,            mediastore.audio.media.is_ringtone,            mediastore.audio.media.mime_type,            mediastore.audio.media.size,            mediastore.audio.media.title     };      @override     public loader<cursor> oncreateloader(int id, bundle args) {         arraylist<string> selectionargslist = new arraylist<string>();         string selection;         uri baseuri;         string[] projection;         switch (id) {             case internal_cursor_id:                 baseuri = mediastore.audio.media.internal_content_uri;                 projection = internal_columns;                 break;             case external_cursor_id:                 baseuri = mediastore.audio.media.external_content_uri;                 projection = external_columns;                 break;             default:                 return null;         }         selection = "(_data ?)";         selectionargslist.add("%");         string[] selectionargs = selectionargslist.toarray(new string[selectionargslist.size()]);         return new cursorloader(this, baseuri, projection, selection, selectionargs,             mediastore.audio.media.default_sort_order);     }        @override     public void onloadfinished(loader<cursor> loader, cursor data) {         if (data == null) {             return;         }         if (data.movetofirst()) {             {                  int id = data.getint(data.getcolumnindexorthrow(mediastore.audio.media._id));                 string album = data.getstring(data.getcolumnindexorthrow(mediastore.audio.media.album));                 string artist = data.getstring(data.getcolumnindexorthrow(mediastore.audio.media.artist));                 string composer =                     data.getstring(data.getcolumnindexorthrow(mediastore.audio.media.composer));                 string _data = data.getstring(data.getcolumnindexorthrow(mediastore.audio.media.data));                 int dateadded = data.getint(data.getcolumnindexorthrow(mediastore.audio.media.date_added));                 int datemodified =                     data.getint(data.getcolumnindexorthrow(mediastore.audio.media.date_modified));                 string displayname =                     data.getstring(data.getcolumnindexorthrow(mediastore.audio.media.display_name));                 int duration = data.getint(data.getcolumnindexorthrow(mediastore.audio.media.duration));                 int isalarm = data.getint(data.getcolumnindexorthrow(mediastore.audio.media.is_alarm));                 int ismusic = data.getint(data.getcolumnindexorthrow(mediastore.audio.media.is_music));                 int isnotification =                     data.getint(data.getcolumnindexorthrow(mediastore.audio.media.is_notification));                 int ispodcast = data.getint(data.getcolumnindexorthrow(mediastore.audio.media.is_podcast));                 int isringtone =                     data.getint(data.getcolumnindexorthrow(mediastore.audio.media.is_ringtone));                 string mimetype =                     data.getstring(data.getcolumnindexorthrow(mediastore.audio.media.mime_type));                 int size = data.getint(data.getcolumnindexorthrow(mediastore.audio.media.size));                 string title = data.getstring(data.getcolumnindexorthrow(mediastore.audio.media.title));                 string foldername = new file(new file(_data).getparent()).getname();                 string folderpath = new file(_data).getparent();                  audio audio = new audio();                 audio.setid(id);                 audio.setalbum(album);                 audio.setartist(artist);                 audio.setcomposer(composer);                 audio.setdata(_data);                 audio.setdateadded(dateadded);                 audio.setdatemodified(datemodified);                 audio.setdisplayname(displayname);                 audio.setduration(duration);                 audio.setisalarm(isalarm);                 audio.setismusic(ismusic);                 audio.setisnotification(isnotification);                 audio.setispodcast(ispodcast);                 audio.setisringtone(isringtone);                 audio.setmimetype(mimetype);                 audio.setsize(size);                 audio.settitle(title);                  audios.add(audio);             } while (data.movetonext());         }         this.runonuithread(new runnable() {             @override             public void run() {                 // update audios recyclerview             }         });      } 

this model : audio.class :

public class audio implements parcelable {   private int id;   private string album;   private string artist;   private string composer;   private string data;   private int dateadded;   private int datemodified;   private string displayname;   private int duration;   private int isalarm;   private int ismusic;   private int isnotification;   private int ispodcast;   private int isringtone;   private string mimetype;   private int size;   private string title;    public audio() {   }    protected audio(parcel in) {     id = in.readint();     album = in.readstring();     artist = in.readstring();     composer = in.readstring();     data = in.readstring();     dateadded = in.readint();     datemodified = in.readint();     displayname = in.readstring();     duration = in.readint();     isalarm = in.readint();     ismusic = in.readint();     isnotification = in.readint();     ispodcast = in.readint();     isringtone = in.readint();     mimetype = in.readstring();     size = in.readint();     title = in.readstring();   }    public static final creator<audio> creator = new creator<audio>() {     @override      public audio createfromparcel(parcel in) {       return new audio(in);     }      @override      public audio[] newarray(int size) {       return new audio[size];     }   };    @override    public boolean equals(object o) {     if (this == o) return true;     if (!(o instanceof audio)) return false;     audio photo = (audio) o;     return id == photo.id;   }    @override    public int hashcode() {     return id;   }    public int getid() {     return id;   }    public void setid(int id) {     this.id = id;   }    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;   }    public string getcomposer() {     return composer;   }    public void setcomposer(string composer) {     this.composer = composer;   }    public string getdata() {     return data;   }    public void setdata(string data) {     this.data = data;   }    public int getdateadded() {     return dateadded;   }    public void setdateadded(int dateadded) {     this.dateadded = dateadded;   }    public int getdatemodified() {     return datemodified;   }    public void setdatemodified(int datemodified) {     this.datemodified = datemodified;   }    public string getdisplayname() {     return displayname;   }    public void setdisplayname(string displayname) {     this.displayname = displayname;   }    public int getduration() {     return duration;   }    public void setduration(int duration) {     this.duration = duration;   }    public int getisalarm() {     return isalarm;   }    public void setisalarm(int isalarm) {     this.isalarm = isalarm;   }    public int getismusic() {     return ismusic;   }    public void setismusic(int ismusic) {     this.ismusic = ismusic;   }    public int getisnotification() {     return isnotification;   }    public void setisnotification(int isnotification) {     this.isnotification = isnotification;   }    public int getispodcast() {     return ispodcast;   }    public void setispodcast(int ispodcast) {     this.ispodcast = ispodcast;   }    public int getisringtone() {     return isringtone;   }    public void setisringtone(int isringtone) {     this.isringtone = isringtone;   }    public string getmimetype() {     return mimetype;   }    public void setmimetype(string mimetype) {     this.mimetype = mimetype;   }    public int getsize() {     return size;   }    public void setsize(int size) {     this.size = size;   }    public string gettitle() {     return title;   }    public void settitle(string title) {     this.title = title;   }    @override public int describecontents() {     return 0;   }    @override public void writetoparcel(parcel parcel, int i) {     parcel.writeint(id);     parcel.writestring(album);     parcel.writestring(artist);     parcel.writestring(composer);     parcel.writestring(data);     parcel.writeint(dateadded);     parcel.writeint(datemodified);     parcel.writestring(displayname);     parcel.writeint(duration);     parcel.writeint(isalarm);     parcel.writeint(ismusic);     parcel.writeint(isnotification);     parcel.writeint(ispodcast);     parcel.writeint(isringtone);     parcel.writestring(mimetype);     parcel.writeint(size);     parcel.writestring(title);   } } 

why cursor returning duplicates audios? or there on device causes these duplicates returned.


Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -