【问题标题】:What's wrong with the Second Activity Java code?第二个活动 Java 代码有什么问题?
【发布时间】:2014-07-21 14:05:04
【问题描述】:

我正在尝试设计在主屏幕上有 3 个按钮的应用程序;当用户按下前两个按钮时,它会播放原始文件夹中的不同音乐。主屏幕上的第三个按钮应该将用户带到下一个屏幕,该屏幕也有 2 个按钮。

我尝试在模拟器上运行我的应用程序。它在主屏幕的前两个按钮上播放音乐,当我单击第三个(下一步)按钮时,它会将用户带到下一个屏幕。但是,当我单击第二个屏幕的第一个或第二个按钮时。它说“不幸的是,您的应用程序已停止”。我现在不知道我的 SecondActivity.Java 代码有什么问题。

任何帮助将不胜感激。下面是我的主要和二等 JAVA 代码。我确实在 manifest.xml 文件中声明了我的第二个 Activity。

主要活动 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;
        }
       }
    }

【问题讨论】:

  • @AlexBalo...我附上了我的logcat错误..我对Android完全陌生所以我不知道...如果可能的话,请您发布第二个屏幕的代码...这将是一个很大的帮助..
  • 您正在创建 resId = 1 的媒体播放器,我认为这是问题所在,您的原始文件夹中不存在此资源

标签: java android layout manifest


【解决方案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;
    }

【讨论】:

  • 我尝试了 PedroHawk 建议的 d 代码。但是,上一个屏幕中的音乐...没有停止。我该如何解决?
  • 在移动第二个活动之前,将 mo.pause() 与 mp3 歌曲的当前位置指针一起使用,然后将 mp.resume() 与该位置指针一起使用
【解决方案2】:

在您的第二个活动中,创建您的 mediapPlayer AFTER 开关盒。在你的路上,他会尝试复制一些仍然不存在的东西:

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

【讨论】:

  • 您的 logcat 非常明确:Resources$NotFoundException at your secondActivity 的第 34 行。
  • user3856054 如果您觉得您的问题已经解决,请关闭此主题。继续编程
  • 我尝试了您的代码 .. 并且成功了.. 但是,上一个(主)屏幕中的音乐 .. 并没有停止 .. 我该如何解决这个问题?
  • 在启动 secondactivity 之前,您必须使用 release() 方法释放 firstactivity mediaPlayer。试试看
  • 为我的朋友 PedroHawk 鼓掌......代码真的很有效......非常感谢......
【解决方案3】:

错误说明如下:

Resources not found with id of 0x01 

意思是这个问题:

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

那是一个不存在的资源ID。

如果您的 /res/raw 文件夹中有这些文件,那么您应该使用 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();

【讨论】:

  • 每当..我尝试更改..int resId = 1 --to-- int resId ...它在“mp = MediaPlayer.create(this, resId)”处给我一个错误。 ..说我必须初始化它...这就是为什么我把“int resId = 1”
  • 嗯,是的,但是 resId 不存在。给它一个特定的 R.raw.somethingaudio
猜你喜欢
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多