Android错误:这段代码有什么问题?

Android错误:这段代码有什么问题?,android,media-player,android-mediaplayer,Android,Media Player,Android Mediaplayer,在onItemclicklistener的onclick方法中,我试图获取所选项目的id。我认为这是错误的。正确的方法是什么?我想稍后将此链接到另一个将播放所选歌曲的活动。使用明确的意图是最好的方法吗 public class SongListFragment extends Fragment { private int audioIndex; public SongListFragment() { } @Override public void onCreate(Bundle savedI

在onItemclicklistener的onclick方法中,我试图获取所选项目的id。我认为这是错误的。正确的方法是什么?我想稍后将此链接到另一个将播放所选歌曲的活动。使用明确的意图是最好的方法吗

public class SongListFragment extends Fragment {

private int audioIndex;
public SongListFragment() { }

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_songs, container, false);
    ListView audioView = (ListView)view.findViewById(R.id.song_view);
    final ArrayList<String> audioList = new ArrayList<>();
    String[] proj = {MediaStore.Audio.Media._ID,
                    MediaStore.Audio.Media.DISPLAY_NAME};
    final Cursor audioCursor = getActivity().
                            getContentResolver().
                            query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);

    if (audioCursor != null) {
        if (audioCursor.moveToFirst()) {
            do {
                int audioIndex = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);

                audioList.add(audioCursor.getString(audioIndex));
            } while (audioCursor.moveToNext());
        }
    }


    ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
                                                android.R.layout.simple_list_item_1,
                                                android.R.id.text1, audioList);
    audioView.setAdapter(adapter);
    audioView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String[] proj = {MediaStore.Audio.Media.DISPLAY_NAME};
            final Cursor audioCursor = getActivity().
                    getContentResolver().
                    query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);

            if (audioCursor != null) {
                if (audioCursor.moveToFirst()) {
                    do {
                        int audioIndex = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
                    } while (audioCursor.moveToNext());}}
            audioCursor.close();
            Toast.makeText(getActivity().getApplicationContext(), R.string.select+audioCursor.getString(audioIndex), Toast.LENGTH_SHORT).show();
        }
    });
    return view;

}
}

请更改此行:

int audioIndex = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)-1;

您似乎正在引发越界异常,因为它从1开始,而不是从0开始。

您的onItem click侦听器应该如下所示:

audioView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
           int clickedAudioIndex = Integer.parseInt(audioList.get(position));
            Toast.makeText(getActivity().getApplicationContext(), R.string.select+audioCursor.getString(clickedAudioIndex), Toast.LENGTH_SHORT).show();
        } 
    }); 
audioView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
int clickedAudioIndex=Integer.parseInt(audioList.get(position));
Toast.makeText(getActivity().getApplicationContext(),R.string.select+audioCursor.getString(clickedAudioIndex),Toast.LENGTH\u SHORT.show();
} 
}); 

您能发布您收到的错误吗?请不要在项目Click中的任何位置使用onItemClick的位置变量。检查代码一次。借助此位置变量,您将能够检索所选位置的值row@vguzzi在我看到错误之前,我的电话断开了。但是我在手机上安装的apk没有运行。起初,除了McClick部分,一切都很顺利。“歌曲被检索出来了。”Anjali只是说,即使是错误的方式,代码的其余部分也应该正常工作?我的意思是,只有在单击listitem时才会调用该代码。在那之前,歌曲应该在一个列表中检索,不是吗?@SidharthKriplani如果你复制错误并粘贴日志,你会更容易找到解决方案。这不起作用。我在想这一定和这个职位有关吧?
audioView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
           int clickedAudioIndex = Integer.parseInt(audioList.get(position));
            Toast.makeText(getActivity().getApplicationContext(), R.string.select+audioCursor.getString(clickedAudioIndex), Toast.LENGTH_SHORT).show();
        } 
    });