2016-08-03 6 views
0

私は音楽ダウンロードとプレーヤアプリケーションを持っていますが、問題は、ディレクトリパスが異なるデバイスで異なるため、毎日nullポインタ例外が大量に発生していることです。 解決方法異なるデバイス上の音楽フォルダへのアクセス

final String MEDIA_PATH = new String(Environment.getExternalStorageDirectory().toString() + "/Music"); 

、ここでどのように私は、曲のリストを作成しています(getPlaylist):クラッシュ分析サービスから

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()); 
      songsList.add(song); 
     } 
    } 
    return songsList; 
} 

スタックトレース:

Full Stack Trace: 
java.lang.NullPointerException 
music.download.justin.utils.SongReader.getPlayList(SongReader.java:22) 
music.download.justin.Player.player(Player.java:164) 
music.download.justin.Player.onViewCreated(Player.java:103) 
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138) 
android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740) 
android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501) 
android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490) 
android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
android.support.v4.view.ViewPager.populate(ViewPager.java:1105) 
android.support.v4.view.ViewPager.populate(ViewPager.java:951) 
android.support.v4.view.ViewPager$3.run(ViewPager.java:250) 
android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) 
android.view.Choreographer.doCallbacks(Choreographer.java:579) 
android.view.Choreographer.doFrame(Choreographer.java:547) 
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) 
android.os.Handler.handleCallback(Handler.java:800) 
android.os.Handler.dispatchMessage(Handler.java:100) 
android.os.Looper.loop(Looper.java:194) 
android.app.ActivityThread.main(ActivityThread.java:5371) 
java.lang.reflect.Method.invokeNative(Native Method) 
java.lang.reflect.Method.invoke(Method.java:525) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
dalvik.system.NativeStart.main(Native Method) 

ここ

は私の道であります主な影響を受けるデバイス: Samsung(全モデル) 京セラ HTC

+0

あなたはこれを見たことがありますか:http://stackoverflow.com/documentation/android/150/storing-files-in-internal-external-storage#t=201608031018161454618そして試してみてください。 –

+0

環境から直接音楽パスを取得できますか?多分@HtmlTosinの提案を見てください。 – xdevs23

答えて

0

これは、デバイスがSDカード/外部ストレージからメディアパスを読み込めなかったためです。例外処理を使用するか、クラッシュまたは例外を避けるためにelse条件で有効なエラーメッセージをスローすることができます。

これらのデバイスのAndroidバージョンを確認します。超えた場合は、コードレベルでアクセス許可を指定する必要があります。

関連する問題