2016-07-15 21 views
7

Tôi đã giải quyết vấn đề này một lúc và đã xem xét tất cả các câu hỏi liên quan mà tôi có thể tìm thấy, chẳng hạn như: this one, this onethis one. Bạn có thể giúp tôi sửa lỗi này không? Nó là người duy nhất bị ném bởi logcat.Không thể tìm thấy phương pháp theo ngữ cảnh gốc hoặc tổ tiên

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'

đang liên quan:

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> 
+0

Đó là tất cả mọi thứ trong 'radio_activity' – McLemore

+0

tôi có thể nhìn thấy mã nơi bạn đang gọi phương pháp này' playPauseMusic' ?? ** được gọi khi người dùng chạm vào nút ** tôi có thể thấy mã nút đó không ?? –

+0

It's in 'radio_activity'. Đó là ImageButton. – McLemore

Trả lời

3

Xác định onClick trong xml có nghĩa là bạn cần xác định nó cho một chế độ xem cụ thể tại đây là ImageButton bạn không thể có hai đối số trong phương thức đó.

lỗi của bạn cũng được nói rằng không thể tìm thấy phương pháp playPauseMusic (Xem) nghĩa biên dịch cần một phương pháp với tham số duy nhất View nơi như bạn đã có hai tham số View & ImageButton đây là lý do tại sao bạn nơi nhận được lỗi đó. Chỉ cần xóa một đối số khỏi phương thức và nó sẽ hoạt động.

Làm điều đó như thế này:

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.

+0

Nó đưa ra một lỗi rằng 'playPause' phải được khai báo cuối cùng. Tôi đã làm điều đó, 'cuối cùng Xem playPause' và bây giờ tôi nhận được một lỗi Xây dựng:' Lỗi: (39, 30) lỗi: không thể tìm thấy phương pháp biểu tượng setImageResource (int) '. Bất kỳ đề xuất? – McLemore

+0

bạn có chắc chắn đã xóa 'playPause.setOnClickListener' ở phía bên phương thức giống như tôi đã thực hiện ở trên mã ?? xin vui lòng sao chép-dán mã trên và cho tôi biết nếu vấn đề vẫn còn tồn tại .. !! –

+0

Tôi đã không nhìn thấy điều đó khi tôi đưa ra nhận xét. Tôi đang chờ đợi xây dựng. EDIT: Có lỗi ở trên vẫn còn ném. – McLemore

1

poss Mã của bạn ibly nên bắt đầu với:

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

Bạn đang xác định onClick trong xml

android:onClick="playPauseMusic" 

onClicks nội Vì vậy, phương pháp hoạt động, bạn đã có quá. Nếu họ là một số quan điểm.

Bạn phải khởi tạo và nhận được nó từ xml trong mã, cho ex-

Nếu bạn có ImageButton trong xml, có id là "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 
     } 
    }); 
} 

Trong trường hợp của bạn, bạn đã có thuộc tính onClick trong xml và một thuộc tính khác trên mãCLICK. Bạn sử dụng một.

Các vấn đề liên quan