2014-10-28 3 views
0

привет Я использую учебник аудиоплеера от 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; 
} 

И это сработало :)

ответ

0

http://developer.android.com/reference/android/provider/MediaStore.Audio.AudioColumns.html Вы должны проверить типы возвращаемого ваши запросы. поле DURATION не возвращает строку, которая возвращает long.

String songs_duration = ""; 

должен быть

long songs_duration = ""; 

Тогда вам не придется разобрать или использовать нулевой чек. Кроме того, ваша математика и все проверяет.

Смежные вопросы