在曲经理空指针异常? [英] null pointer exception in song manager?

查看:186
本文介绍了在曲经理空指针异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想这$ C $下歌厅播放列表。

 最后弦乐MEDIA_PATH =新的String(MediaStore.Audio.Media.IS_MUSIC += 0!);
    //最后弦乐MEDIA_PATH =新的String(MediaStore.Video.Media.IS_PRIVATE);
            私人的ArrayList< HashMap的<字符串,字符串>> songsList =新的ArrayList< HashMap的<字符串,字符串>>();


    //构造函数
    公共SongsManager(){

    }

    / **
     *功能读取SD卡所有的MP3文件
     *并存储在ArrayList中的细节
     * * /
    公众的ArrayList< HashMap的<字符串,字符串>> getPlayList(){
        文件家庭=新的文件(MEDIA_PATH);

        如果(home.listFiles(新FileExtensionFilter())长度GT; 0){
            对于(文件文件:home.listFiles(新FileExtensionFilter())){
                HashMap的<字符串,字符串>歌=新的HashMap<字符串,字符串>();
                song.put(songTitle,file.getName()子串(0,(file.getName()长度() -  4))。。);
                song.put(songPath,file.getPath());

                //添加每一首歌曲的SongList
                songsList.add(歌曲);
            }
        }
        //返回歌曲列表排列
        返回songsList;
    }

    / **
     *分类过滤,它们是具有MP3播放和放文件; .MP4的扩展名
     * * /
    类FileExtensionFilter实现了FilenameFilter {
        公共布尔接受(文件目录,字符串名称){
            返程(name.endsWith(MP3)|| name.endsWith()的MP4。);
        }
    }
}
 

下面是logcat的 -

  10月二号日至九号:09:34.749:E / AndroidRuntime(389):由:显示java.lang.NullPointerException
10月2日至九日:09:34.749:E / AndroidRuntime(389):在com.example.androidtablayout.SongsManager.getPlayList(SongsManager.java:29)
10月2日至九日:09:34.749:E / AndroidRuntime(389):在com.example.androidtablayout.AudioActivity.onCreate(AudioActivity.java:29)
10月2日至九日:09:34.749:E / AndroidRuntime(389):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10月2日至九日:09:34.749:E / AndroidRuntime(389):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
 


我使用C Grishu您$ C $为u建议,但在这一次错误来我用它的方式如下:

 公共类SongsManager {
私人的ArrayList< HashMap的<字符串,字符串>> songsList =新的ArrayList< HashMap的<字符串,字符串>>();
私人光标musiccursor,videocursor;
//投影音频媒体文件
    的String []音乐= {MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Video.Media.SIZE};
    //投影视频媒体文件
    的String []视频= {MediaStore.Video.Media._ID,MediaStore.Video.Media.DATA,MediaStore.Video.Media.DISPLAY_NAME,MediaStore.Video.Media.SIZE};

    INT totalSongs,totalSongs1;
    公众的ArrayList< HashMap的<字符串,字符串>> getPlayList(){
        //为音频媒体设置光标
        musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                音乐,NULL,NULL,NULL);
        //为视频媒体设置光标
        videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                视频,NULL,NULL,NULL);

        totalSongs = musiccursor.getCount();
        totalSongs1 = videocursor.getColumnCount();

         如果(musiccursor!= NULL){
                如果(musiccursor.moveToFirst()){
                    做 {
                        串songname = musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                        INT song_id = musiccursor.getInt(musiccursor.getColumnIndex(MediaStore.Audio.Media._ID));
                        字符串FULLPATH = musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.DATA));

                        songsList.addAll(songsList);
                        串albumname = musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                        INT album_id = musiccursor.getInt(musiccursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                        串artistname = musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                        INT artist_id = musiccursor.getInt(musiccursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));

                     }而(musiccursor.moveToNext());
                }
                musiccursor.close();
            }
         否则,如果(videocursor!= NULL){
            如果(videocursor.moveToFirst()){
                做{
                    串songname = videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME));
                    INT song_id = videocursor.getInt(videocursor.getColumnIndex(MediaStore.Video.Media._ID));
                    字符串FULLPATH = videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Media.DATA));

                    songsList.addAll(songsList);
                    串albumname = videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Media.ALBUM));
                   // INT album_id = videocursor.getInt(videocursor.getColumnIndex(MediaStore.Video.Media.ALBUM_ID));
                    串artistname = videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Media.ARTIST));
                   // INT artist_id = videocursor.getInt(videocursor.getColumnIndex(MediaStore.Video.Media.ARTIST_ID));

                }而(videocursor.moveToNext());
            }
            videocursor.close();
        }
         返回songsList;
}


    私人光标managedQuery(URI externalContentUri,字符串[]音频2,
            Object对象,对象Object2的,对象object3){
        // TODO自动生成方法存根
        返回null;
    }

      }
 

解决方案

试试这个:

 的String [] STAR = {*};
   INT totalSongs;
 公共无效ListAllSongs()
  {
    乌里allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    != 0字符串选择= MediaStore.Audio.Media.IS_MUSIC +;
    如果(MusicUtils.isSd present()){
        光标= managedQuery(allsongsuri,STAR,选择,NULL,NULL);
        totalSongs = cursor.getCount();
        如果(光标!= NULL){
            如果(cursor.moveToFirst()){
                做 {
                    字符串songname =光标
                            .getString(光标.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                    INT song_id = cursor.getInt(光标
                            .getColumnIndex(MediaStore.Audio.Media._ID));
                    字符串FULLPATH = cursor.getString(光标
                            .getColumnIndex(MediaStore.Audio.Media.DATA));
                    fullsongpath.add(完整路径);
                    字符串albumname = cursor.getString(光标
                            .getColumnIndex(MediaStore.Audio.Media.ALBUM));
                    INT album_id =光标
                            .getInt(光标
                                    .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                    字符串artistname = cursor.getString(光标
                            .getColumnIndex(MediaStore.Audio.Media.ARTIST));
                    INT artist_id =光标
                            .getInt(光标
                                    .getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));
                                            }而(cursor.moveToNext());
            }
            cursor.close();
        }
    }
 }
 

编辑:

您看看下面的链接,以显示存储在SD卡中的列表视图的所有视频文件。

1)<一href="http://gypsynight.word$p$pss.com/2012/02/17/how-to-show-all-video-file-stored-in-your-sd-card-in-a-listview/"相对=nofollow>链接1
2)链接2
3)链接3

我希望它会帮助你。

感谢。

I am trying this code for geting a playlist.

final String MEDIA_PATH=new String(MediaStore.Audio.Media.IS_MUSIC+"!=0");  
    //final String MEDIA_PATH=new String(MediaStore.Video.Media.IS_PRIVATE);
            private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();


    // Constructor
    public SongsManager(){

    }

    /**
     * Function to read all mp3 files from sdcard
     * and store the details in ArrayList
     * */
    public ArrayList<HashMap<String, String>> getPlayList(){
        File home = new File(MEDIA_PATH);

        if (home.listFiles(new FileExtensionFilter()).length > 0) {
            for (File file : home.listFiles(new FileExtensionFilter())) {
                HashMap<String, String> song = new HashMap<String, String>();
                song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
                song.put("songPath", file.getPath());

                // Adding each song to SongList
                songsList.add(song);
            }
        }
        // return songs list array
        return songsList;
    }

    /**
     * Class to filter files which are having .mp3 & .mp4 extension
     * */
    class FileExtensionFilter implements FilenameFilter {
        public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3") || name.endsWith(".MP4"));
        }
    }
}

Here is the logcat --

02-09 10:09:34.749: E/AndroidRuntime(389): Caused by: java.lang.NullPointerException 
02-09 10:09:34.749: E/AndroidRuntime(389): at com.example.androidtablayout.SongsManager.getPlayList(SongsManager.java:29) 
02-09 10:09:34.749: E/AndroidRuntime(389): at com.example.androidtablayout.AudioActivity.onCreate(AudioActivity.java:29) 
02-09 10:09:34.749: E/AndroidRuntime(389): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-09 10:09:34.749: E/AndroidRuntime(389): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)


i am using your code Grishu as u suggest but in this again error come the way i use it shown below:

public class SongsManager {
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
private Cursor musiccursor, videocursor;
// projection for audio media files
    String[] music = { MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Video.Media.SIZE };
    // projection for video media files
    String[] video = { MediaStore.Video.Media._ID,MediaStore.Video.Media.DATA,MediaStore.Video.Media.DISPLAY_NAME, MediaStore.Video.Media.SIZE };

    int totalSongs,totalSongs1;
    public ArrayList<HashMap<String, String>>getPlayList(){
        // set cursor for audio media
        musiccursor= managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                music, null, null, null);
        // set cursor for video media
        videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                video, null, null, null);

        totalSongs=musiccursor.getCount();
        totalSongs1=videocursor.getColumnCount();

         if (musiccursor!= null) {
                if (musiccursor.moveToFirst()) {
                    do {
                        String songname = musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                        int song_id = musiccursor.getInt(musiccursor.getColumnIndex(MediaStore.Audio.Media._ID));
                        String fullpath = musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.DATA));

                        songsList.addAll(songsList);
                        String albumname =musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                        int album_id = musiccursor.getInt(musiccursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                        String artistname = musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                        int artist_id = musiccursor.getInt(musiccursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));

                     } while (musiccursor.moveToNext());
                }
                musiccursor.close();
            }
         else if (videocursor!=null) {
            if(videocursor.moveToFirst()){
                do{
                    String songname= videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME));
                    int song_id= videocursor.getInt(videocursor.getColumnIndex(MediaStore.Video.Media._ID));
                    String fullpath=videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Media.DATA));

                    songsList.addAll(songsList);
                    String albumname =videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Media.ALBUM));
                   // int album_id = videocursor.getInt(videocursor.getColumnIndex(MediaStore.Video.Media.ALBUM_ID));
                    String artistname = videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Media.ARTIST));
                   // int artist_id = videocursor.getInt(videocursor.getColumnIndex(MediaStore.Video.Media.ARTIST_ID));

                }while (videocursor.moveToNext());
            }
            videocursor.close();
        }
         return songsList;
}


    private Cursor managedQuery(Uri externalContentUri, String[] audio2,
            Object object, Object object2, Object object3) {
        // TODO Auto-generated method stub
        return null;
    }

      }

解决方案

Try this :

 String[] STAR = { "*" };
   int totalSongs;
 public void ListAllSongs() 
  {
    Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
    if (MusicUtils.isSdPresent()) {
        cursor = managedQuery(allsongsuri, STAR, selection, null, null);
        totalSongs = cursor.getCount();
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    String songname = cursor
                            .getString(cursor                                        .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                    int song_id = cursor.getInt(cursor
                            .getColumnIndex(MediaStore.Audio.Media._ID));
                    String fullpath = cursor.getString(cursor
                            .getColumnIndex(MediaStore.Audio.Media.DATA));
                    fullsongpath.add(fullpath);
                    String albumname = cursor.getString(cursor
                            .getColumnIndex(MediaStore.Audio.Media.ALBUM));
                    int album_id = cursor
                            .getInt(cursor
                                    .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                    String artistname = cursor.getString(cursor
                            .getColumnIndex(MediaStore.Audio.Media.ARTIST));
                    int artist_id = cursor
                            .getInt(cursor
                                    .getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));
                                            } while (cursor.moveToNext());
            }
            cursor.close();
        }
    }
 }

EDITED:

You check out the below links to show all video file stored in your sd card in a listview.

1) Link 1
2) Link 2
3) Link 3

I hope it will help you .

Thanks.

这篇关于在曲经理空指针异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆