привет Я использую учебник аудиоплеера от androidhive.info и в SongsManager.java. Я пытаюсь преобразовать длительность в минуты и секунды. Мне удалось это сделать, но я продолжаю получать исключение NumberFormatException, с которым я не знаю, как с этим бороться. Часть Кодекса здесь:Как конвертировать аудио Mediastore Duration в минуты и секунды?
public ArrayList<HashMap<String, String>> getPlayList(Context c) {
String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
/*use content provider to get beginning of database query that queries for all audio by display name, path
and mimtype which i dont use but got it incase you want to scan for mp3 files only you can compare with RFC mimetype for mp3's
*/
final Cursor mCursor = c.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.MIME_TYPE,MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media.ALBUM,MediaStore.Audio.Media.DURATION }, null, null,
"LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC");
String songs_name = "";
String mAudioPath = "";
String songs_artist = "";
String songs_album = "";
String songs_duration = "";
/* run through all the columns we got back and save the data we need into the arraylist for our listview*/
if (mCursor.moveToFirst()) {
do {
String file_type = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.MIME_TYPE));
songs_name = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
mAudioPath = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
songs_artist = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
songs_album = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
songs_duration = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
HashMap<String, String> song = new HashMap<String, String>();
songs_duration = setCorrectDuration(songs_duration);
song.put("songTitle", songs_name);
song.put("songPath", mAudioPath);
song.put("songArtist", songs_artist);
song.put("songAlbum", songs_album);
song.put("songDuration", songs_duration);
songsList.add(song);
} while (mCursor.moveToNext());
}
mCursor.close(); //cursor has been consumed so close it
return songsList;
}
private String setCorrectDuration(String songs_duration) {
// TODO Auto-generated method stub
if(Integer.valueOf(songs_duration) != null){
int time = Integer.valueOf(songs_duration);
int seconds = time/1000;
int minutes = seconds/60;
seconds = seconds % 60;
if(seconds<10){
songs_duration = String.valueOf(minutes) + ":0" + String.valueOf(seconds);
}else{
songs_duration = String.valueOf(minutes) + ":" + String.valueOf(seconds);
}
return songs_duration;
}
return null;
}
И это часть LogCat:
10-28 23: 39: 13,047: W/dalvikvm (30524): ThreadId = 1: поток, выходящий с неперехваченным исключение (группа = 0x422f2700) 10-28 23: 39: 13.047: E/AndroidRuntime (30524): FATAL EXCEPTION: main 10-28 23: 39: 13.047: E/AndroidRuntime (30524): java.lang.RuntimeException:
Невозможно начать работу ComponentInfo {com.vany.vansmusic/com.vany.vansmusic.AndroidBuildingMusicPlayerActivity}: java.lang.NumberFormatException: Неверный int: "null"
10-28 23: 39: 13,047: Е/AndroidRuntime (30524): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2305) 10-28 23: 39: 13,047: Е/AndroidRuntime (30524): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2359) 10-28 23: 39: 13.047: E/AndroidRuntime (30524): at android.app.ActivityThread.access $ 700 (ActivityThread.java:165) 10-28 23: 39: 13.047: E/AndroidRuntime (30524): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1326)
Я по-настоящему ценю помощь.
UPDATE: Фигурное это для тех, кто имея такую же или подобную проблемы ->
if (mCursor.moveToFirst()) {
do {
String file_type = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.MIME_TYPE));
songs_name = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
mAudioPath = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
songs_artist = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
songs_album = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
songs_duration = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
HashMap<String, String> song = new HashMap<String, String>();
if(String.valueOf(songs_duration) != null){
try{
Long time = Long.valueOf(songs_duration);
long seconds = time/1000;
long minutes = seconds/60;
seconds = seconds % 60;
if(seconds<10){
String csongs_duration = String.valueOf(minutes) + ":0" + String.valueOf(seconds);
song.put("songDuration", csongs_duration);
}else{
String ccsongs_duration = String.valueOf(minutes) + ":" + String.valueOf(seconds);
song.put("songDuration", ccsongs_duration);
}
}catch(NumberFormatException e){
song.put("songDuration", songs_duration);
}
}else{
String nothing = "0";
song.put("songDuration", nothing);
}
song.put("songTitle", songs_name);
song.put("songPath", mAudioPath);
song.put("songArtist", songs_artist);
song.put("songAlbum", songs_album);
songsList.add(song);
} while (mCursor.moveToNext());
}
mCursor.close(); //cursor has been consumed so close it
return songsList;
}
И это сработало :)