Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not find method in parent or ancestor context

I've been dealing with this problem for awhile and have looked at all the relevant questions I could find, such as: this one, this one, and this one. Could you help me correct this error? It's the only one being thrown by the logcat.

java.lang.IllegalStateException: Could not find method playPauseMusic(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageButton with id 'playPause' 

Relevant code:

radio.java

package com.example.jacob.wutk;  import android.media.AudioManager; import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageButton;  import java.io.IOException;  public class radio extends AppCompatActivity {      /** Called when the user touches the button */      public void playPauseMusic (View view, final ImageButton playPause) throws IOException {         String url = "http://streamer.cci.utk.edu:8000/wutk-vorbis"; // your URL here         final MediaPlayer mediaPlayer = new MediaPlayer();          mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {              public void onPrepared(MediaPlayer mediaPlayer){                 mediaPlayer.start();             }         });          playPause.setOnClickListener(new View.OnClickListener(){             public void onClick(View view) {                 if (mediaPlayer.isPlaying()) {                     mediaPlayer.pause();                     playPause.setImageResource(R.drawable.play1);                 } else {                     playPause.setImageResource(R.drawable.pause1);                 }             }         });         mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);         mediaPlayer.setDataSource(url);         mediaPlayer.prepareAsync();     }      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_radio);     } } 

activity_radio.xml

    <?xml version="1.0" encoding="utf-8"?> <FrameLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:layout_alignParentTop="true"     android:layout_centerHorizontal="true"     tools:context="com.example.jacob.wutk.radio">     <ImageView         android:id="@+id/imageView"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:layout_gravity="left|center_vertical"         android:scaleType="centerCrop"         android:src="@drawable/background_mic1"/>      <LinearLayout         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:orientation="horizontal"         android:paddingBottom="1.0dip"         android:paddingLeft="4.0dip"         android:paddingRight="4.0dip"         android:paddingTop="5.0dip">        <ImageButton            android:id="@+id/playPause"            android:layout_width="0.0dip"            android:layout_height="wrap_content"            android:layout_weight="1.0"            android:background="?android:selectableItemBackground"            android:clickable="true"            android:onClick="playPauseMusic"            android:scaleType="fitCenter"            android:src="@drawable/play1"/>        <ImageView            android:layout_width="0.0dip"            android:layout_height="fill_parent"            android:layout_marginRight="5dp"            android:layout_weight="1.0"            android:background="?android:selectableItemBackground"            android:scaleType="fitCenter"            android:src="@drawable/logo"/>      </LinearLayout>  </FrameLayout> 
like image 894
McLemore Avatar asked Jul 15 '16 09:07

McLemore


Video Answer


1 Answers

Defining onClick in xml means you need to define it for a particular view here is ImageButton you can not have two arguments in that method.

Your error is also saying that Could not find method playPauseMusic(View) means compiler needs a public method with single parameter View, whereas you were having two parameters: View & ImageButton.

This is the reason why you where getting that error. Just remove one argument from the method and it will work.

Do it like this :

public class radio extends AppCompatActivity {      /** Called when the user touches the button */      public void playPauseMusic (View playPause) {         String url = "http://streamer.cci.utk.edu:8000/wutk-vorbis"; // your URL here         final MediaPlayer mediaPlayer = new MediaPlayer();          mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {              public void onPrepared(MediaPlayer mediaPlayer){                 mediaPlayer.start();             }         });                   if (mediaPlayer.isPlaying()) {              mediaPlayer.pause();              ((ImageButton)playPause).setImageResource(R.drawable.play1);         } else {             ((ImageButton)playPause).setImageResource(R.drawable.pause1);         }                  mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);         mediaPlayer.setDataSource(url);         mediaPlayer.prepareAsync();     }      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_radio);     } } 

One more thing writing android:onClick="playPauseMusic" means the method playPauseMusic will be called on Button click so you have already defined a button click so no need to define it inside the method by playPause.setOnClickListener so I have removed that code.

like image 190
Janki Gadhiya Avatar answered Sep 23 '22 01:09

Janki Gadhiya