2017-01-18 9 views
0

私のアプリケーションでplayer.pause();メソッドを呼び出す際にこのエラーが発生します。 ImageButtonを使用して音楽を一時停止しています。私はsong_listクラスからメソッドを呼び出してトラックを一時停止します。しかし、次の例外が発生します。mediaplayerメソッドを呼び出す際のオブジェクトの参照例外がありません

試みがnullのオブジェクト参照の上に仮想メソッド '空android.media.MediaPlayer.pauseを()' を呼び出すために

マイMainActivity:

public class MusicKom extends AppCompatActivity { 

    private static String TAG = "PermissionDemo"; 
    public static final int REQUEST_READ_STORAGE = 112; 
    private ImageButton btplay; 
    private ImageButton pausemusic; 

    public void playbutton(int playbuttonid){ 

     btplay=(ImageButton)findViewById(R.id.play); 
     btplay.setBackgroundResource(playbuttonid); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_music_kom); 

     ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 

     // Create an adapter that knows which fragment should be shown on each page 
     final viewpageadapter adapter = new viewpageadapter(getSupportFragmentManager()); 

     viewPager.setAdapter(adapter); 

     Button bt1 = (Button)findViewById(R.id.song_list); 
     Button bt2 = (Button)findViewById(R.id.album_list); 
     Button bt3 = (Button)findViewById(R.id.artist_list); 
     pausemusic = (ImageButton)findViewById(R.id.play); 


     bt1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
       viewPager.setCurrentItem(0); 
      } 
     }); 

     bt2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
       viewPager.setCurrentItem(1); 
      } 
     }); 

     bt3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
       viewPager.setCurrentItem(2); 
      } 
     }); 

     pausemusic.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       songs_list sl=new songs_list(); 
       sl.pauseplay(); 
       pausemusic.setBackgroundResource(R.drawable.stop); 
      } 
     }); 
    } 
} 

私のsong_list断片:

public class songs_list extends Fragment { 

    // Adapter that exposes data from a Cursor to a ListView widget. 
    private MediaCursorAdapter mediaAdapter = null; 
    public MediaPlayer player; 
    private String currentFile=""; 
    private boolean isStarted = true; 
    private TextView selelctedFile = null; 
    private View v=null; 
    private String selectedtitem=null; 
    private int fileposition; 

    @Override 
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { 

     player = new MediaPlayer(); 

     // Use cursor to get data from external resource 

     final Cursor cursor = getActivity().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null); 


     // check Cursor has data or not 

     if (null != cursor) { 
      cursor.moveToFirst(); 

      mediaAdapter = new MediaCursorAdapter(getActivity().getApplicationContext(), R.layout.list_layout, cursor); 
      v=inflater.inflate(R.layout.fragment_songs_list, container, false); 

      ListView lv = (ListView)v.findViewById(android.R.id.list); 


      lv.setAdapter(mediaAdapter); 



      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

        selectedtitem = (String) view.getTag(); 
        startPlay(selectedtitem); 
       } 
      }); 


     } 


     return v; 
    } 

    private void startPlay(String file) { 

     player.stop(); 
     player.reset(); 

     try { 
      player.setDataSource(file); 
      player.prepare(); 
      player.start(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     ((MusicKom) getActivity()).playbutton(R.drawable.play); 
    } 

    public void pauseplay(){ 
     Log.i(TAG, "pauseplay: "); 
     player.pause(); 
    } 
} 
+0

'logcat'をご覧ください。あなたの 'player'はnullです。 'player'を他のアクティビティにどのように渡していますか? – rupinderjeet

+0

申し訳ありませんが、完全なコードではありませんでした。今すぐやってみて下さい。 –

答えて

0

他のアクティビティ方法をどのように呼び出すことができますか実際に活動を開始しています。あなたのケースでは、別のアクティビティがロードされないため、メディアプレーヤーオブジェクトは作成されません。

詳細については、コード全体を投稿してください。

+0

私は完全なコードを更新しました。 –

0

フラグメントを通常のJavaクラスとして使用しています。フラグメントのインスタンス化時にフラグメントのonCreateView()は呼び出されません。これは、有効なFragmentTranscationでフラグメントを表示する場合にのみ呼び出されます。 Fragment Life cycleを参照してください。

コメントpauseplay();を呼び出すときにフラグメントが表示されるようにするには、関連するコードを追加します。

それ以外の場合は、通常のJavaクラスを使用して、どこからでもメディアプレーヤーを作成して再生/一時停止する必要があります。代わりに

songs_list sl = new songs_list(); 
sl.pauseplay(); 

の今

// package com.example.package_name; 

import android.media.MediaPlayer; 

public class SoundPlayer { 

    private MediaPlayer mediaPlayer; 

    // rawSongId is in form of 'R.id.song_name' 
    public SoundPlayer(Context context, int rawSongId){ 
     mediaPlayer = MediaPlayer.create(context, rawSongId); 
    } 

    public SoundPlayer(Context context, String dataSource){ 
     // handle media player with your data source 
    } 

    public void start(){ 
     if(mediaPlayer != null) { 
      mediaPlayer.start(); 
     } 
    } 

    public void pause(){ 
     if(mediaPlayer != null) { 
      mediaPlayer.pause(); 
     } 
    } 

    public void stop(){ 
     if(mediaPlayer != null) { 
      mediaPlayer.stop(); // reset(); ? 
     } 
    } 

} 

、あなたは、

String dataSource = ""; // generate your dataSource here 

// initialize MediaPlayer with dataSource 
SoundPlayer soundPlayer = new SoundPlayer(this, dataSource); 

// Use its methods 
soundPlayer.start(); 
soundPlayer.pause(); 
soundPlayer.stop(); 

適切camelCase coding conventionsを使用してみてくださいすることができますような何か。 pauseplay()pausePlay();またはpauseOrPlay()である必要があります。

+0

は機能しません! mainactivityのエラーを表示するとコンストラクタが解決されない –

+0

E/MediaPlayer:状態1でポーズが発生する E/MediaPlayer:エラー(-38,0) E/MediaPlayer:エラー(-38,0) –

関連する問題