java android illegalstateexception

java - No se pudo encontrar el método en el contexto padre o ancestro



android illegalstateexception (2)

Definir onClick en xml significa que necesita definirlo para una vista particular aquí es ImageButton no puede tener dos argumentos en ese método.

Su error también indica que no se pudo encontrar el método playPauseMusic (Ver) significa que el compilador necesita un método con un solo parámetro. View donde, mientras tenía dos parámetros, View y ImageButton esta es la razón por la que obtuvo ese error. Simplemente elimine un argumento del método y funcionará.

Hazlo asi :

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); } }

Una cosa más al escribir android:onClick="playPauseMusic" significa que el método playPauseMusic se playPauseMusic al hacer clic en el botón, por lo que ya definió un clic en el botón, por lo que no es necesario definirlo dentro del método mediante playPause.setOnClickListener así que playPause.setOnClickListener ese código.

He estado lidiando con este problema por un tiempo y he analizado todas las preguntas relevantes que pude encontrar, como por ejemplo: este , este y este . ¿Podrías ayudarme a corregir este error? Es el único que es lanzado por el 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''

Código relevante:

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>


Su código posiblemente debería comenzar con:

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

Estás especificando onClick en xml

android:onClick="playPauseMusic"

Entonces, el método funciona, también tienes onClicks internos. Si son algunos puntos de vista.

Tienes que inicializar y obtenerlo desde el código XML en el código, por ejemplo:

Si tiene ImageButton en xml, cuya id es "playPause"

ImageButton playPause; //Declare it here if you wanna use it in all other places in the class or outside of your class @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_radio); playPause = (ImageButton)findViewById(R.id.playPause); playPause.setOnClickListener(new View.OnClickListener(){ public void onClick(View view) { //OnCLick Stuff } }); }

En tu caso, tienes el atributo onClick en xml y otro onCLick en el código. Usted utiliza uno.