什么是错的第二个活动的Java代码?(What's wrong with the Secon

2019-10-20 11:57发布

我试图设计出具有主屏幕上的3个按钮的应用程序; 当用户按下前两个按钮它起着位于原文件夹中的不同的音乐。 在主屏幕上的第三个按钮应该驱动用户到下一个屏幕,其也具有2个按钮。

我试图在模拟器上运行我的应用程序。 它起着主屏幕上的前两个按钮的音乐,当我点击第三(下一步)按钮,它把用户带到下一个屏幕。 然而,当我点击第一或第二屏幕的第二个按钮。 它说:“很遗憾,您的应用程序已经停止”。 我不知道现在有什么错我SecondActivity.Java代码。

任何帮助将不胜感激。 下面是我的主,二级JAVA代码。 我没宣布我的第二次活动在manifest.xml文件。

主要活动的Java代码..

    import android.app.Activity;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;




public class MainActivity extends Activity implements OnClickListener {
    private MediaPlayer mp;

   @Override
   public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      setVolumeControlStream(AudioManager.STREAM_MUSIC);
      findViewById(R.id.button_1).setOnClickListener(this);
      findViewById(R.id.button_2).setOnClickListener(this);
      findViewById(R.id.button_3).setOnClickListener(this);
   }
   public void onClick(View v) {   
       int resId=1;
      switch (v.getId()) {
      case R.id.button_1: resId = R.raw.button_1; break;
      case R.id.button_2: resId = R.raw.button_2; break;
      case R.id.button_3:
         startActivity(new Intent(MainActivity.this,SecondActivity.class));
         return;

      }
   // Release any resources from previous MediaPlayer
      if (mp != null) {   
          mp.release(); 
      }   
   // Create a new MediaPlayer to play this sound
      mp = MediaPlayer.create(this, resId); 
      mp.start();
   }
}

SecondActivity.Java

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;




public class SecondActivity extends Activity implements OnClickListener {
    private MediaPlayer mp;



   @Override
   public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_second);
      setVolumeControlStream(AudioManager.STREAM_MUSIC);
      findViewById(R.id.button_4).setOnClickListener(this);
      findViewById(R.id.button_5).setOnClickListener(this);
   }
   public void onClick(View v) {
        int resId = 1;
        // Release any resources from previous MediaPlayer
        if (mp != null) {               
            mp.release();   
        }

        // Create a new MediaPlayer to play this sound
        mp = MediaPlayer.create(this, resId); 
        mp.start();

        switch (v.getId()) {
          case R.id.button_4: resId = R.raw.button_4; break;
          case R.id.button_5: resId = R.raw.button_5; break;
        }
       }
    }

Answer 1:

我觉得你的代码应该这样的..删除

 mp = MediaPlayer.create(this, resId); 
        mp.start();

前switch语句

    switch (v.getId()) {
      case R.id.button_4:
          resId = R.raw.button_4; 
          mp = MediaPlayer.create(this, resId); 
          mp.start();
          break;
      case R.id.button_5:
      resId = R.raw.button_5;
      mp = MediaPlayer.create(this, resId); 
      mp.start(); 
      break;
    }


Answer 2:

关于你的第二个活动,创建mediapPlayer 切换情况。 对你的方式,他会尝试重现的东西,仍然不存在:

 @Override
   public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_second);
      setVolumeControlStream(AudioManager.STREAM_MUSIC);
      findViewById(R.id.button_4).setOnClickListener(this);
      findViewById(R.id.button_5).setOnClickListener(this);
   }
   public void onClick(View v) {
        int resId = 1;


        switch (v.getId()) {
          case R.id.button_4: resId = R.raw.button_4; break;
          case R.id.button_5: resId = R.raw.button_5; break;
        }

        // Release any resources from previous MediaPlayer
        if (mp != null) {               
            mp.release();   
        }

        // Create a new MediaPlayer to play this sound
        mp = MediaPlayer.create(this, resId); 
        mp.start();
       }
    }

更新:在你的onclick任何行动之前执行mp.release()():

public class MainActivity extends Activity implements OnClickListener {
    private MediaPlayer mp;

   @Override
   public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      setVolumeControlStream(AudioManager.STREAM_MUSIC);
      findViewById(R.id.button_1).setOnClickListener(this);
      findViewById(R.id.button_2).setOnClickListener(this);
      findViewById(R.id.button_3).setOnClickListener(this);
   }
   public void onClick(View v) {   
       int resId=1;

   // Release any resources from previous MediaPlayer
      if (mp != null) {   
          mp.release(); 
      } 

      switch (v.getId()) {
      case R.id.button_1: resId = R.raw.button_1; break;
      case R.id.button_2: resId = R.raw.button_2; break;
      case R.id.button_3:
         startActivity(new Intent(MainActivity.this,SecondActivity.class));
         break;

      }

   // Create a new MediaPlayer to play this sound
      mp = MediaPlayer.create(this, resId); 
      mp.start();
   }
}


Answer 3:

该错误表示如下:

Resources not found with id of 0x01 

这意味着这个问题是这样的:

int resId = 1;
mp = MediaPlayer.create(this, resId); 

这是不存在的资源ID。

如果您在/ RES /原始文件夹中有这些文件,那么你应该使用R.raw.xyz ID。

虽然我想这个问题确实是刚才说的

   // Create a new MediaPlayer to play this sound
    mp = MediaPlayer.create(this, resId); 
    mp.start();

    switch (v.getId()) {
      case R.id.button_4: resId = R.raw.button_4; break;
      case R.id.button_5: resId = R.raw.button_5; break;
    }
   }

混淆在一起,而不是

    switch (v.getId()) {
      case R.id.button_4: resId = R.raw.button_4; break;
      case R.id.button_5: resId = R.raw.button_5; break;
    }
   }

   // Create a new MediaPlayer to play this sound
    mp = MediaPlayer.create(this, resId); 
    mp.start();


文章来源: What's wrong with the Second Activity Java code?