Android 中讀取SD卡文件時(shí)拋出NullPointerException錯(cuò)誤解決辦法
Android 中讀取SD卡文件時(shí)拋出NullPointerException錯(cuò)誤解決辦法
相關(guān)源碼:
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文件夾下的文件信息時(shí)在foreach時(shí)拋出NullPointerException,最后發(fā)現(xiàn)是沒有添加讀取SD卡的權(quán)限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
獲取SD卡路徑:”/mnt/sdcard/” “/storage/sdcard/”
官方推薦:
Environment.getExternalStorageDirectory.getPath();
該方法獲取的路徑最后沒有'/'
"/mnt/sdcard" "/storage/sdcard"
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實(shí)現(xiàn))
這篇文章主要介紹了Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實(shí)現(xiàn)),需要的朋友可以參考下2017-04-04
Android 通過觸摸動(dòng)態(tài)地在屏幕上畫矩形效果
在屏幕上用手指畫出一個(gè)區(qū)域,返回所圈的區(qū)域坐標(biāo)。通過自定義view設(shè)置畫筆及對(duì)應(yīng)參數(shù),在onTouchEvent()回調(diào)函數(shù)里,對(duì)觸摸事件進(jìn)行判斷。畫出矩形圖形,具體實(shí)現(xiàn)代碼大家參考下本文2017-07-07
Android開發(fā)之滑動(dòng)數(shù)值選擇器NumberPicker用法示例
這篇文章主要介紹了Android開發(fā)之滑動(dòng)數(shù)值選擇器NumberPicker用法,結(jié)合實(shí)例形式分析了Android滑動(dòng)數(shù)值選擇器NumberPicker的功能、相關(guān)函數(shù)、事件監(jiān)聽、界面布局等操作技巧,需要的朋友可以參考下2019-03-03
Android左滑返回功能的實(shí)現(xiàn)示例代碼
本篇文章主要介紹了Android左滑返回的實(shí)現(xiàn)示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
Android應(yīng)用閃屏頁延遲跳轉(zhuǎn)的三種寫法
這篇文章主要介紹了 Android應(yīng)用閃屏頁延遲跳轉(zhuǎn)的三種寫法,需要的朋友可以參考下2017-03-03
Android布局中margin與padding的區(qū)別及說明
這篇文章主要介紹了Android布局中margin與padding的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Android 仿微博的點(diǎn)贊功能的實(shí)現(xiàn)原理(持續(xù)點(diǎn)贊再取消)
經(jīng)常玩微博的同志都知道,微博的持續(xù)點(diǎn)贊再取消功能,下面小編給大家?guī)砹薃ndroid 仿微博的點(diǎn)贊功能的實(shí)現(xiàn)原理(持續(xù)點(diǎn)贊再取消),感興趣的朋友跟隨腳本之家小編一起看看吧2018-03-03
Flutter Android端啟動(dòng)白屏問題的解決
Flutter 應(yīng)用在 Android 端上啟動(dòng)時(shí)會(huì)有一段很明顯的白屏現(xiàn)象,白屏的時(shí)長由設(shè)備的性能決定,設(shè)備性能越差,白屏?xí)r間越長。這篇文章主要介紹了Flutter Android端啟動(dòng)白屏問題的解決。感興趣的小伙伴們可以參考一下2018-07-07

