2013-04-18 43 views
1

我是新来的android一直在学习,因为我去了,现在在一个点,我找不到答案。我的问题为什么我崩溃。我知道我的问题在于:Music m =(Music)lv.getItemAtPosition(position);。我可以发表评论,并替换一个字符串前:String song_name =“mp3”;一切正常。lv.getItemAtPosition(位置)崩溃

我想要做的是使手机上任何地方找到的歌曲列表和选择更改一个按钮的文本设置为选择的标题。就像我说过的,除了当我去使用音乐m =(Music)lv.getItemAtPosition(position);

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    ListView listView = getListView(); 

    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 
    String[] projection = { MediaStore.Audio.Media._ID, 
      MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, 
      MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DISPLAY_NAME, 
      MediaStore.Audio.Media.DURATION}; 



    List<String> songs = new ArrayList<String>(); 
    ArrayAdapter<String> arrayAdaptor = new ArrayAdapter<String>(MusicListActivity.this, R.layout.a_listview,R.id.tv, songs); 
    listView.setAdapter(arrayAdaptor); 

    Cursor cursor = this.getContentResolver().query(
      MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection,null, null); 
      while(cursor.moveToNext()){ 
      songs.add(cursor.getString(1) + "||" + 
        cursor.getString(2)); 
      cursor.getString(3); 
      Collections.sort(songs); 
      String sname = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); 
      Music mb = new Music(); 
     mb.setName(sname); 
     } 
    } 

protected void onListItemClick(ListView lv, View v, int position, long id) { 
    super.onListItemClick(lv, v, position, id); 

    Music m = (Music) lv.getItemAtPosition(position); 
    String song_name = m.getName(); 


    Intent i = getIntent(); 
String msg = i.getStringExtra("local"); 
if(msg.contentEquals("song")){ 

    i.putExtra("songname", song_name); 
    setResult(RESULT_OK, i); 
    finish(); 

} 
}} 

这里是我的日志,

04-18 06:23:12.932: W/dalvikvm(3383): threadid=1: thread exiting with uncaught exception (group=0x40017560) 
    04-18 06:23:12.932: E/AndroidRuntime(3383): FATAL EXCEPTION: main 
    04-18 06:23:12.932: E/AndroidRuntime(3383): java.lang.ClassCastException: java.lang.String 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at com.alarm.smsalarmclock.MusicListActivity.onListItemClick(MusicListActivity.java:59) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at android.app.ListActivity$2.onItemClick(ListActivity.java:319) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at android.widget.ListView.performItemClick(ListView.java:3513) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at android.os.Handler.handleCallback(Handler.java:587) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at android.os.Handler.dispatchMessage(Handler.java:92) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at android.os.Looper.loop(Looper.java:130) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at java.lang.reflect.Method.invokeNative(Native Method) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at java.lang.reflect.Method.invoke(Method.java:507) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633) 
    04-18 06:23:12.932: E/AndroidRuntime(3383):  at dalvik.system.NativeStart.main(Native Method) 

我试着用搜索引擎 致命异常:主要java.lang.ClassCastException:java.lang.String中和变化,但没有找到任何东西。如果我能够指出正确的方向将是有益的,并感谢先进。

回答

0

您尝试投StringMusic,但你不能。 如果你只需要歌曲的名字,你可以尝试:

String song_name = (String) lv.getItemAtPosition(position); 
+0

非常感谢你这是完全正常,只是日食希望它*字符串SONG_NAME =(字符串)lv.getItemAtPosition(位置),这是没什么大不了的,因为它为我做*。再一次谢谢! – user2264566

+0

很高兴我可以帮助:) – BobTheBuilder

0

arrayAdapter包含String秒,但你在他们铸造Music

Music m = (Music) lv.getItemAtPosition(position); 
String song_name = m.getName(); 

更改为:

String song_name = (String)lv.getItemAtPosition(position); 
0

试试这个错误是由于错误的数据类型铸造

String song_name =lv.getItemAtPosition(position).getName() 
+0

谢谢你做了它 – user2264566

+0

好吧,你可以接受并关闭此 – DjHacktorReborn

0

送入ListView控件数组是一个字符串数组,这基本上包含歌曲名称。所以如果那是你感兴趣的对象,就直接从那里提取歌曲名称。问题在于你试图将弦乐转换为音乐。

protected void onListItemClick(ListView lv, View v, int position, long id) { 
    super.onListItemClick(lv, v, position, id); 

    String song_name = lv.getItemAtPosition(position); 
    Intent i = getIntent(); 
    String msg = i.getStringExtra("local"); 
    if(msg.contentEquals("song")){ 

     i.putExtra("songname", song_name); 
     setResult(RESULT_OK, i); 
     finish(); 

} 
+0

谢谢你这样做 – user2264566