简体   繁体   English

单击按钮时应用程序崩溃

[英]App is crashing when clicking button

I was trying to do this music player app.我正在尝试做这个音乐播放器应用程序。

I've created a relative layout for each position in a 2x2 grid layout, and inside each relative layout, I put one seekbar and one button.我为 2x2 网格布局中的每个位置创建了一个相对布局,在每个相对布局中,我放置了一个搜索栏和一个按钮。 For each button I'd like to play a different music, and the seekbar above the button should be used to set the music position.对于每个按钮,我想播放不同的音乐,按钮上方的搜索栏应该用于设置音乐位置。

Also, I've used tags to determine which button has been pressed.此外,我使用标签来确定按下了哪个按钮。

After I've done the interface I've started implementing the onPress method, it just won't work and I'm not really sure how to specify the seekbar that will be active when a certain music is playing... here is my code so far, showing an error in line 27 ( ImageView counter = (ImageView) view; ) and crashing when I click any button:完成界面后,我开始实现 onPress 方法,但它不起作用,我不确定如何指定在播放特定音乐时将处于活动状态的搜索栏……这是我的到目前为止的代码,在第 27 行显示错误( ImageView counter = (ImageView) view; )并在我单击任何按钮时崩溃:

package com.victorpietro.musicproject;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

    int musicPlaying = 0;
    AudioManager audioManager;
    MediaPlayer mplayer;

    SeekBar scrubber;

    public void onPress(View view){

        ImageView counter = (ImageView) view;
        int tag = Integer.parseInt(counter.getTag().toString());
        Log.i("Tag", counter.getTag().toString());
        switch (tag){
            case 1:
                scrubber = (SeekBar)findViewById(R.id.seekBar);
                mplayer = MediaPlayer.create(this, R.raw.house);
                musicPlaying = 1;
                break;

            case 2:
                scrubber = (SeekBar)findViewById(R.id.seekBar2);
                mplayer = MediaPlayer.create(this, R.raw.techno);
                musicPlaying = 2;
                break;

            case 3:
                scrubber = (SeekBar)findViewById(R.id.seekBar3);
                mplayer = MediaPlayer.create(this, R.raw.deephouse);
                musicPlaying = 3;
                break;

            case 4:
                scrubber = (SeekBar)findViewById(R.id.seekBar4);
                mplayer = MediaPlayer.create(this, R.raw.chill);
                musicPlaying = 4;
                break;
        }

        scrubber.setMax(mplayer.getDuration());

        int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

        new Timer().scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run(){
                scrubber.setProgress(mplayer.getCurrentPosition());
            }
        }, 0, 100);

        scrubber.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                mplayer.seekTo(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                if(mplayer.isPlaying()) {
                    mplayer.pause();
                }
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                if(!(mplayer.isPlaying())) {
                    mplayer.start();
                }
            }
        });
    }

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

        audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

    }
}

And here the xml:这里是 xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/background_dark"
    tools:context="com.victorpietro.musicproject.MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginBottom="200dp"
        android:layout_marginEnd="32dp"
        android:layout_marginRight="32dp"
        android:background="@android:color/black"
        android:padding="8dp"
        android:text="MUSIC STYLE PLAYER"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textSize="26sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <GridLayout
        android:id="@+id/gridLayout"
        android:layout_width="fill_parent"
        android:layout_height="347dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:columnCount="2"
        android:rowCount="2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/seekBar">


        <RelativeLayout
            android:id="@+id/r_layout1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_gravity="fill_horizontal"
            android:layout_row="0"
            android:layout_rowWeight="1">

            <Button
                android:id="@+id/button"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/imageView"
                android:layout_alignStart="@+id/imageView"
                android:layout_centerVertical="true"
                android:onClick="onPress"
                android:tag="1"
                android:text="House" />

            <ImageView
                android:id="@+id/imageView"
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:layout_above="@+id/button"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="20dp"
                android:background="@android:color/background_light"
                app:srcCompat="@drawable/houseimg" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/r_layout2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_gravity="fill_horizontal"
            android:layout_row="0"
            android:layout_rowWeight="1">

            <Button
                android:id="@+id/button2"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:onClick="onPress"
                android:tag="2"
                android:text="Techno" />

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:layout_above="@+id/button2"
                android:layout_alignLeft="@+id/button2"
                android:layout_alignStart="@+id/button2"
                android:layout_marginTop="20dp"
                android:background="@android:color/background_light"
                app:srcCompat="@drawable/technoimg" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/r_layout3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_gravity="fill_horizontal"
            android:layout_row="1"
            android:layout_rowWeight="1">

            <Button
                android:id="@+id/button3"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:onClick="onPress"
                android:tag="3"
                android:text="Deep House" />

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="150dp"
                android:layout_height="70dp"
                android:layout_above="@+id/button3"
                android:layout_alignLeft="@+id/button3"
                android:layout_alignStart="@+id/button3"
                android:layout_marginTop="20dp"
                android:background="@android:color/background_light"
                android:padding="5dp"
                app:srcCompat="@drawable/deephouseimg" />
        </RelativeLayout>


        <RelativeLayout
            android:id="@+id/r_layout4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_gravity="fill_horizontal"
            android:layout_row="1"
            android:layout_rowWeight="1">

            <Button
                android:id="@+id/button4"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:onClick="onPress"
                android:tag="4"
                android:text="Chill Out" />

            <ImageView
                android:id="@+id/imageView4"
                android:layout_width="150dp"
                android:layout_height="70dp"
                android:layout_above="@+id/button4"
                android:layout_alignLeft="@+id/button4"
                android:layout_alignStart="@+id/button4"
                android:layout_marginTop="20dp"
                android:background="@android:color/background_light"
                android:padding="3dp"
                app:srcCompat="@drawable/chillimg" />
        </RelativeLayout>

    </GridLayout>

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="125dp"
        android:layout_height="wrap_content"
        android:layout_above="@+id/gridLayout"
        android:layout_marginEnd="50dp"
        android:layout_marginRight="50dp"
        android:layout_marginStart="40dp"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="82dp"
        android:background="@android:color/background_light"
        app:layout_constraintBottom_toTopOf="@+id/gridLayout"
        app:layout_constraintEnd_toStartOf="@+id/seekBar2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <SeekBar
        android:id="@+id/seekBar2"
        android:layout_width="125dp"
        android:layout_height="wrap_content"
        android:layout_above="@+id/gridLayout"
        android:layout_marginEnd="40dp"
        android:layout_marginRight="50dp"
        android:layout_marginTop="100dp"
        android:background="@android:color/background_light"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/seekBar"
        app:layout_constraintTop_toTopOf="parent" />

    <SeekBar
        android:id="@+id/seekBar3"
        android:layout_width="125dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="16dp"
        android:layout_marginEnd="51dp"
        android:layout_marginRight="51dp"
        android:layout_marginLeft="42dp"
        android:layout_marginStart="42dp"
        android:background="@android:color/background_light"
        app:layout_constraintBottom_toBottomOf="@+id/gridLayout"
        app:layout_constraintEnd_toStartOf="@+id/seekBar4"
        app:layout_constraintStart_toStartOf="parent" />

    <SeekBar
        android:id="@+id/seekBar4"
        android:layout_width="125dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="16dp"
        android:layout_marginRight="41dp"
        android:layout_marginEnd="41dp"
        android:background="@android:color/background_light"
        app:layout_constraintBottom_toBottomOf="@+id/gridLayout"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/seekBar3" />

</android.support.constraint.ConstraintLayout>

Error Log:错误日志:

FATAL EXCEPTION: main Process: com.victorpietro.musicproject, PID: 12799 java.lang.IllegalStateException: Could not execute method for android:onClick at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) at致命异常:主进程:com.victorpietro.musicproject,PID:12799 java.lang.IllegalStateException:无法在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 处执行 android:onClick 的方法在 android.view.View.performClick(View.java:6294) 在 android.view.View$PerformClick.run(View.java:24770) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android。 os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method .invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 引起:java .lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.ClassCastException: android.support.v7.widget.AppCompatButton cannot be cast to android.widget.ImageView at com.victorpietro.musicproject.MainActivity.onPress(MainActivity.java:27) at java.lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os .Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method。 invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 引起:java。 lang.ClassCastException: android.support.v7.widget.AppCompatButton 不能被投射到 android.widget.ImageView at com.victorpietro.musicproject.MainActivity.onPress(MainActivity.java:27) at java.lang.reflect.Method.invoke(本机方法)在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 在 android.view.View.performClick(View.java:6294) 在 android.view.View$PerformClick.run( View.java:24770) 在 android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread .main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal .os.ZygoteInit.main(ZygoteInit.java:807)

this will do the trick here!这将在这里解决问题! don't touch your xml at all and do these in your app's java code side根本不要接触您的 xml,并在您的应用程序的 Java 代码端执行这些操作

 public void onPress(View view){

    // get the view item's ID which in your case will be the button's id and use a switch case on it

    int id = view.getId()

    switch (id){
        case R.id.button:
            scrubber = (SeekBar)findViewById(R.id.seekBar);
            mplayer = MediaPlayer.create(this, R.raw.house);
            musicPlaying = 1;
            break;

        case R.id.button2:
            scrubber = (SeekBar)findViewById(R.id.seekBar2);
            mplayer = MediaPlayer.create(this, R.raw.techno);
            musicPlaying = 2;
            break;

       case R.id.button3:
            scrubber = (SeekBar)findViewById(R.id.seekBar3);
            mplayer = MediaPlayer.create(this, R.raw.deephouse);
            musicPlaying = 3;
            break;

       case R.id.button4:
            scrubber = (SeekBar)findViewById(R.id.seekBar4);
            mplayer = MediaPlayer.create(this, R.raw.chill);
            musicPlaying = 4;
            break;
    }

Your logcat clearly says what the error is.您的 logcat 清楚地说明了错误是什么。 Kindly go through the logcat and find out in which line no.请通过 logcat 并找出哪一行。 error is.错误是。 Here这里

java.lang.ClassCastException: android.support.v7.widget.AppCompatButton cannot be cast to android.widget.ImageView at com.victorpietro.musicproject.MainActivity.onPress(MainActivity.java:27)

it says at line no.它在第一行说。 27 you have used a AppCompatButton but while initializing it you have used ImageView. 27 您使用了AppCompatButton但在初始化它时您使用了 ImageView。 You need to use AppCompatButton not imageView.您需要使用AppCompatButton而不是 imageView。 Hence instead of using因此,而不是使用

 ImageView counter = (ImageView) view;

use Button counter=(Button) view;使用Button counter=(Button) view; most probably it should work.很可能它应该工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM