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
Post a Comment