音乐播放器 - 尝试使用对象时功能不起作用

时间:2013-01-02 22:01:07

标签: java android object

我正在为我的计算项目制作音乐播放器应用程序。我得到了它的工作,但发现使用对象会得到更多的标记。结果,我改变了一些代码来合并对象的使用,但是当我执行我的应用程序时它不起作用。顺便说一下,我对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

1 个答案:

答案 0 :(得分:0)

Song是一项活动。因此,在调用onCreate之前,您无法调用manageQuery。那是你的错误。