简体   繁体   中英

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. 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:

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 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 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.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

 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. Kindly go through the logcat and find out in which line no. 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. You need to use AppCompatButton not imageView. Hence instead of using

 ImageView counter = (ImageView) view;

use Button counter=(Button) view; most probably it should work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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