在曲经理空指针异常? [英] null pointer exception in song manager?
本文介绍了在曲经理空指针异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想这$ 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.
I hope it will help you .
Thanks.
这篇关于在曲经理空指针异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文