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
4

1 に答える 1

0

歌はアクティビティです。したがって、onCreate が呼び出される前に manageQuery を呼び出すことはできません。それはあなたの間違いです。

于 2013-01-02T22:10:00.780 に答える