Android 中读取SD卡文件时抛出NullPointerException错误解决办法

 更新时间:2017年05月25日 14:30:13   投稿:lqh  
这篇文章主要介绍了Android 中读取SD卡文件时抛出NullPointerException错误解决办法的相关资料,需要的朋友可以参考下

Android 中读取SD卡文件时抛出NullPointerException错误解决办法

相关源码:

package com.example.musicplayer;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity {

  private ListView listView;
  private final String path = "/storage/sdcard/mp3/";
  private List<String> musicList;
  private ViewHolder viewHolder;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.lv_music);

    Toast.makeText(getApplicationContext(), path, Toast.LENGTH_SHORT).show();

    initMusic();
  }

  private void initMusic() {
    File file = new File(path);
    File[] files = file.listFiles();
    musicList = new ArrayList<String>();

    for (File f : files) {
      if (f.getName().endsWith(".mp3")) {
        musicList.add(f.getAbsolutePath());
      }
    }
    listView.setAdapter(new MusicListAdapter());
  }

  private class MusicListAdapter extends BaseAdapter{

    @Override
    public int getCount() {
      return musicList.size();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      View view = null;
      if(convertView == null){
        view = View.inflate(getApplicationContext(), R.layout.activity_music_item, null);
        viewHolder = new ViewHolder();
        viewHolder.musicName = (TextView) view.findViewById(R.id.tv_music_name);
      } else {
        view = convertView;
      }

      String path = musicList.get(position);

      viewHolder.musicName.setText(path.substring(path.lastIndexOf("/") + 1));
      return view;
    }

    @Override
    public Object getItem(int position) {
      // TODO Auto-generated method stub
      return null;
    }

    @Override
    public long getItemId(int position) {
      // TODO Auto-generated method stub
      return 0;
    }


  }
}

获取SD卡中MP3文件夹下的文件信息时在foreach时抛出NullPointerException,最后发现是没有添加读取SD卡的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

获取SD卡路径:”/mnt/sdcard/” “/storage/sdcard/”

官方推荐:

Environment.getExternalStorageDirectory.getPath();

该方法获取的路径最后没有'/'

"/mnt/sdcard"  
"/storage/sdcard"

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 创建Android守护进程实例(底层服务)

    创建Android守护进程实例(底层服务)

    这篇文章主要介绍了创建Android守护进程实例(底层服务),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android AlertDialog实现分享对话框/退出对话框/下载对话框

    Android AlertDialog实现分享对话框/退出对话框/下载对话框

    这篇文章主要介绍了Android AlertDialog实现分享对话框/退出对话框/下载对话框的相关资料,需要的朋友可以参考下
    2016-04-04
  • Android实现扩展Menu的方法

    Android实现扩展Menu的方法

    这篇文章主要介绍了Android实现扩展Menu的方法,涉及Android操作menu菜单的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android开发实现NFC刷卡读取的两种方式

    Android开发实现NFC刷卡读取的两种方式

    这篇文章主要为大家详细介绍了Android开发中实现NFC刷卡读取的两种方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Android获取本机各种类型文件的方法

    Android获取本机各种类型文件的方法

    这篇文章主要为大家详细介绍了Android获取本机各种类型文件的方法,包括音乐、视频、图片、文档等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android实现简单水波纹效果

    Android实现简单水波纹效果

    这篇文章主要为大家详细介绍了Android实现简单水波纹效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android开发之DiffUtil的使用详解

    Android开发之DiffUtil的使用详解

    这篇文章文给大家介绍了DiffUtil的使用,相信大家每位Android开发者们都知道谷歌最近更新了Support Library 24.2.0,而DiffUtil就是在这个版本添加的一个工具类。下面就跟着小编一起来看看,有需要的可以参考借鉴。
    2016-09-09
  • Flutter 快速实现聊天会话列表效果示例详解

    Flutter 快速实现聊天会话列表效果示例详解

    这篇文章主要为大家介绍了Flutter 快速实现聊天会话列表效果示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • loadavg数据异常引发问题起源分析

    loadavg数据异常引发问题起源分析

    这篇文章主要为大家介绍了loadavg数据异常引发问题起源分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android okhttp3.0忽略https证书的方法

    Android okhttp3.0忽略https证书的方法

    这篇文章主要介绍了 Android okhttp3.0忽略https证书的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论