android - How to obtain data from a listview and pass it to another activity -
my app returns albums media store , places them in listview. when album clicked on, opens listview contains songs pertaining album. when click on song, app crashes. want able obtain filepath of selected song , pass activity plays song. here's code: public class albums extends listactivity { cursor cursor;
@override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.playlist); string[] columns = { android.provider.mediastore.audio.albums._id, android.provider.mediastore.audio.albums.album }; cursor = managedquery(mediastore.audio.albums.external_content_uri, columns, null, null, null); string[] displayfields = new string[] { mediastore.audio.albums.album }; int[] displayviews = new int[] { android.r.id.text1 }; setlistadapter(new simplecursoradapter(this, android.r.layout.simple_list_item_1, cursor, displayfields, displayviews)); } protected void onlistitemclick(listview l, view v, int position, long id) { if (cursor.movetoposition(position)) { string[] columns = { mediastore.audio.media.data, mediastore.audio.media._id, mediastore.audio.media.title, mediastore.audio.media.display_name, mediastore.audio.media.mime_type, }; string = android.provider.mediastore.audio.media.album + "=?"; string whereval[] = { cursor.getstring(cursor .getcolumnindex(mediastore.audio.albums.album)) }; string orderby = android.provider.mediastore.audio.media.title; cursor = managedquery(mediastore.audio.media.external_content_uri, columns, where, whereval, orderby); string[] displayfields = new string[] { mediastore.audio.media.display_name }; int[] displayviews = new int[] { android.r.id.text1 }; setlistadapter(new simplecursoradapter(this, android.r.layout.simple_list_item_1, cursor, displayfields, displayviews)); } } }
this contained in logcat:
07-18 17:44:20.327: d/libegl(30458): loaded /system/lib/egl/libgles_android.so 07-18 17:44:20.387: d/libegl(30458): loaded /system/lib/egl/libegl_adreno200.so 07-18 17:44:20.407: d/libegl(30458): loaded /system/lib/egl/libglesv1_cm_adreno200.so 07-18 17:44:20.437: d/libegl(30458): loaded /system/lib/egl/libglesv2_adreno200.so 07-18 17:44:20.607: i/adreno200-eglsub(30458): <configwindowmatch:2078>: format rgba_8888. 07-18 17:44:20.667: d/memalloc(30458): ashmem: mapped buffer base:0x51fcf000 size:1536000 fd:62 07-18 17:44:20.697: d/openglrenderer(30458): enabling debug mode 0 07-18 17:44:20.818: d/memalloc(30458): ashmem: mapped buffer base:0x52156000 size:1536000 fd:65 07-18 17:44:40.737: d/openglrenderer(30458): has fontrender patch 07-18 17:44:41.047: d/memalloc(30458): ashmem: mapped buffer base:0x526bd000 size:1536000 fd:68 07-18 17:44:43.750: i/adreno200-eglsub(30458): <configwindowmatch:2078>: format rgba_8888. 07-18 17:44:43.770: d/memalloc(30458): ashmem: mapped buffer base:0x52834000 size:1536000 fd:71 07-18 17:44:43.960: d/memalloc(30458): ashmem: mapped buffer base:0x52bab000 size:1536000 fd:78 07-18 17:44:43.980: d/openglrenderer(30458): flushing caches (mode 0) 07-18 17:44:44.981: d/memalloc(30458): ashmem: mapped buffer base:0x51ecf000 size:1536000 fd:63 07-18 17:44:47.454: e/cursorwindow(30458): failed read row 4, column -1 cursorwindow has 11 rows, 5 columns. 07-18 17:44:47.454: d/androidruntime(30458): shutting down vm 07-18 17:44:47.454: w/dalvikvm(30458): threadid=1: thread exiting uncaught exception (group=0x40ac7228) 07-18 17:44:47.494: e/androidruntime(30458): fatal exception: main 07-18 17:44:47.494: e/androidruntime(30458): java.lang.illegalstateexception: couldn't read row 4, col -1 cursorwindow. make sure cursor initialized correctly before accessing data it. 07-18 17:44:47.494: e/androidruntime(30458): @ android.database.cursorwindow.nativegetstring(native method) 07-18 17:44:47.494: e/androidruntime(30458): @ android.database.cursorwindow.getstring(cursorwindow.java:491) 07-18 17:44:47.494: e/androidruntime(30458): @ android.database.abstractwindowedcursor.getstring(abstractwindowedcursor.java:51) 07-18 17:44:47.494: e/androidruntime(30458): @ android.database.cursorwrapper.getstring(cursorwrapper.java:118) 07-18 17:44:47.494: e/androidruntime(30458): @ com.project.helixplayer.albums.onlistitemclick(albums.java:49) 07-18 17:44:47.494: e/androidruntime(30458): @ android.app.listactivity$2.onitemclick(listactivity.java:326) 07-18 17:44:47.494: e/androidruntime(30458): @ android.widget.adapterview.performitemclick(adapterview.java:292) 07-18 17:44:47.494: e/androidruntime(30458): @ android.widget.abslistview.performitemclick(abslistview.java:1077) 07-18 17:44:47.494: e/androidruntime(30458): @ android.widget.abslistview$performclick.run(abslistview.java:2533) 07-18 17:44:47.494: e/androidruntime(30458): @ android.widget.abslistview$1.run(abslistview.java:3198) 07-18 17:44:47.494: e/androidruntime(30458): @ android.os.handler.handlecallback(handler.java:605) 07-18 17:44:47.494: e/androidruntime(30458): @ android.os.handler.dispatchmessage(handler.java:92) 07-18 17:44:47.494: e/androidruntime(30458): @ android.os.looper.loop(looper.java:154) 07-18 17:44:47.494: e/androidruntime(30458): @ android.app.activitythread.main(activitythread.java:4945) 07-18 17:44:47.494: e/androidruntime(30458): @ java.lang.reflect.method.invokenative(native method) 07-18 17:44:47.494: e/androidruntime(30458): @ java.lang.reflect.method.invoke(method.java:511) 07-18 17:44:47.494: e/androidruntime(30458): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:784) 07-18 17:44:47.494: e/androidruntime(30458): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:551) 07-18 17:44:47.494: e/androidruntime(30458): @ dalvik.system.nativestart.main(native method) 07-18 17:44:49.846: d/process(30458): killprocess, pid=30458 07-18 17:44:49.846: d/process(30458): dalvik.system.vmstack.getthreadstacktrace(native method) 07-18 17:44:49.846: d/process(30458): java.lang.thread.getstacktrace(thread.java:599) 07-18 17:44:49.846: d/process(30458): android.os.process.killprocess(process.java:788) 07-18 17:44:49.846: d/process(30458): com.android.internal.os.runtimeinit$uncaughthandler.uncaughtexception(runtimeinit.java:104) 07-18 17:44:49.846: d/process(30458): java.lang.threadgroup.uncaughtexception(threadgroup.java:693) 07-18 17:44:49.846: d/process(30458): java.lang.threadgroup.uncaughtexception(threadgroup.java:690) 07-18 17:44:49.846: d/process(30458): dalvik.system.nativestart.main(native method) 07-18 17:44:49.846: i/process(30458): sending signal. pid: 30458 sig: 9
edit question , add logcat. don't know doing on itemclick (correct me if didn't understand): use cursor.movetoposition(position) without determining take cursor; take columns , other query staff; create list.
long story short, seems creating list when click on item! change code on method in way:
@override public void onitemclick(adapterview<?> listview, view view, int position, long id) { // cursor, positioned corresponding row in result set cursor cursor = (cursor) listviev.getitematposition(position); // find data on cursor , launch second activity in order show album's tracks }
edit
after our discussion on comments below, think have change structure on project.
add fist activity wich contain list of album; when click on 1 item, launch second activity wich contain list of album's tracks.
if use database, more easy query , show data.
Comments
Post a Comment