2013-01-02 46 views
0

我正在爲我的計算項目製作音樂播放器應用程序。我得到它的工作,但發現使用對象將獲得更多的標記。因此,我改變了一些代碼來合併對象的使用,但是當我執行我的應用程序時它不起作用。順便說一句,我對Java很新,所以有可能我犯了一個愚蠢的錯誤。音樂播放器 - 嘗試使用對象時不起作用

當我用這個代碼,我嘗試了函數來實現工作:

private void SongTitleEndTime(){ 
    try { 
     TextViewSongTitle = (TextView)findViewById(R.id.songTitle); 
     if (id != 0){ 
      String where = MediaStore.Audio.Media._ID + " = " + "'" + id + "'"; 
       final Cursor mCursor = managedQuery( 
       MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
       new String[] {MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media._ID.toString(), MediaStore.Audio.Media.ALBUM_ID.toString()}, where , null, 
       null); 
       mCursor.moveToFirst(); 
       String title = mCursor.getString(0); 
       String artist = mCursor.getString(1); 
       String name = title + " - " + artist; 
       TextViewSongTitle.setText(name); 
       String fulltime; 
       albumfullid = Long.parseLong(mCursor.getString(3)); 
       TextView EndTime = (TextView) findViewById(R.id.endtime); 
       long Minutes = TimeUnit.MILLISECONDS.toMinutes(mMediaPlayer.getDuration()); 
       long Seconds = TimeUnit.MILLISECONDS.toSeconds(mMediaPlayer.getDuration()) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(mMediaPlayer.getDuration())); 
       if (Seconds < 10) { 
        String second = "0" + String.valueOf(Seconds); 
        fulltime = Minutes + ":" + second; 
       } else { 
         //else display as normal 
        fulltime = Minutes + ":" + Seconds; 
       } 

      EndTime.setText(fulltime); 
      //display the duration of song 
     } 
     } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
     } catch (IllegalStateException e) { 
     e.printStackTrace(); 
     } //catch for errors 
} 

但是,當我嘗試這樣做,我得到了一個錯誤:

主類:

private void SongTitleEndTime() { 
    try { 
     final TextView TextViewSongTitle = (TextView) findViewById(R.id.songTitle); 
     if (CurrentSongID != 0) { 
      final Song CurrentSong = new Song(CurrentSongID); 
      SongName = CurrentSong.SongName; 
      TextViewSongTitle.setText(SongName); 
      AlbumID = CurrentSong.AlbumID; 
      final TextView EndTime = (TextView) findViewById(R.id.endtime); 
      final String TotalSongDuration = CurrentSong.TotalDuration; 
      EndTime.setText(TotalSongDuration); 
     } 
    } catch (final IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (final IllegalStateException e) { 
     e.printStackTrace(); 
    } 
} 

對象種類:

package com.example.music.test; 

import java.util.concurrent.TimeUnit; 
import android.app.Activity; 
import android.database.Cursor; 
import android.provider.BaseColumns; 
import android.provider.MediaStore; 
import android.provider.MediaStore.Audio.AudioColumns; 
import android.provider.MediaStore.MediaColumns; 

public class Song extends Activity { 

private final String where; 
public String SongName; 
public long AlbumID; 
public String TotalDuration; 

public Song(final long SongID) { 
    where = MediaStore.Audio.Media._ID + " = " + "'" + SongID + "'"; 
    final Cursor mCursor = managedQuery(
      MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
      new String[] { MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, 
        MediaStore.Audio.Media._ID.toString(), 
        MediaStore.Audio.Media.ALBUM_ID.toString() }, where, null, null); 
      mCursor.moveToFirst(); 
    final String SongTitle = getSongTitle(mCursor); 
    final String SongArtist = getSongArtist(mCursor); 
    SongName = SongTitle + " - " + SongArtist; 
    AlbumID = getAlbumID(mCursor); 
    TotalDuration = getTotalDuration(); 
} 

public String getSongTitle(final Cursor mCursor) { 
    final String songtitle = mCursor.getString(0); 
    return songtitle; 
} 

public String getSongArtist(final Cursor mCursor) { 
    final String songartist = mCursor.getString(1); 
    return songartist; 
} 

public long getAlbumID(final Cursor mCursor) { 
    final long AlbumID = Long.parseLong(mCursor.getString(3)); 
    return AlbumID; 
} 

public String getTotalDuration() { 
    String TotalTime; 
    final long Minutes = TimeUnit.MILLISECONDS 
      .toMinutes(Player.mMediaPlayer.getDuration()); 
    final long Seconds = TimeUnit.MILLISECONDS 
      .toSeconds(Player.mMediaPlayer.getDuration()) 
      - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS 
        .toMinutes(Player.mMediaPlayer.getDuration())); 
    if (Seconds < 10) { 
     final String second = "0" + String.valueOf(Seconds); 
     TotalTime = Minutes + ":" + second; 
    } else { 
     TotalTime = Minutes + ":" + Seconds; 
    } 
    return TotalTime; 
} 

} 

我得到的錯誤是:

01-02 21:55:41.941: E/AndroidRuntime(717): FATAL EXCEPTION: main 
01-02 21:55:41.941: E/AndroidRuntime(717): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.music.test/com.example.music.test.Player}: java.lang.NullPointerException 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.os.Looper.loop(Looper.java:137) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.ActivityThread.main(ActivityThread.java:4745) 
01-02 21:55:41.941: E/AndroidRuntime(717): at java.lang.reflect.Method.invokeNative(Native Method) 
01-02 21:55:41.941: E/AndroidRuntime(717): at java.lang.reflect.Method.invoke(Method.java:511) 
01-02 21:55:41.941: E/AndroidRuntime(717): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
01-02 21:55:41.941: E/AndroidRuntime(717): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-02 21:55:41.941: E/AndroidRuntime(717): at dalvik.system.NativeStart.main(Native Method) 
01-02 21:55:41.941: E/AndroidRuntime(717): Caused by: java.lang.NullPointerException 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:91) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.Activity.managedQuery(Activity.java:1737) 
01-02 21:55:41.941: E/AndroidRuntime(717): at com.example.music.test.Song.<init>(Song.java:21) 
01-02 21:55:41.941: E/AndroidRuntime(717): at com.example.music.test.Player.SongTitleEndTime(Player.java:90) 
01-02 21:55:41.941: E/AndroidRuntime(717): at com.example.music.test.Player.AllActivities(Player.java:80) 
01-02 21:55:41.941: E/AndroidRuntime(717): at com.example.music.test.Player.onCreate(Player.java:66) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.Activity.performCreate(Activity.java:5008) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
01-02 21:55:41.941: E/AndroidRuntime(717): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
01-02 21:55:41.941: E/AndroidRuntime(717): ... 11 more 
+0

確認'mCursor'不爲null,如果是''''''''''''''''''你的參數提示你的功課有點不對勁:) – t0mm13b

回答

0

歌曲是一個活動。因此,在調用onCreate之前,您無法調用manageQuery。這是你的錯誤。

+0

非常感謝:)結束了傳遞遊標從我的Main類開始,然後從那裏開始工作,這意味着我不必在我的對象類中擴展Activity。我也發現我在我的主類中犯了一個愚蠢的錯誤:) – user1880097