【问题标题】:My Emulator crashes every time I try to run my code每次我尝试运行我的代码时,我的模拟器都会崩溃
【发布时间】:2013-03-15 19:43:44
【问题描述】:

我在网上四处寻找类似的主题,但没有任何帮助。

我正在尝试制作 onClick 按钮声音的简单任务。我连续工作了几个小时试图让代码正确,一旦它看起来可以工作,它甚至都不会运行。

它说,“不幸的是,尝试已停止。”我的 LogCat 文件打开时会显示 200 多条毫无意义的错误消息。

你能看看我的代码并告诉我问题是什么吗?谢谢你。

package com.example.attempt;

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.SoundEffectConstants;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button) findViewById(R.id.muteButton);
        button.setOnClickListener(this);
    }

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




    public void onClick(View v) {
        audioManager.playSoundEffect(SoundEffectConstants.CLICK);
    }
}

【问题讨论】:

  • 据我所知,模拟器不能很好地处理 AudioManager。而且,就像第一个答案显示的那样,您在错误的时间实例化了它。发布 logcat 也会有所帮助。 (如果您没有为清单添加正确的权限,您可能会遇到安全异常)
  • 您还需要发布您的布局(xml)。您显然也在尝试将 TextView 用作按钮...

标签: android debugging crash emulation logcat


【解决方案1】:

onCreate方法内的AudioManageraudioManager实例初始化为:

   AudioManager audioManager;  //<<<< declare here...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button) findViewById(R.id.muteButton);
        button.setOnClickListener(this);

         /// initialize here
        audioManager =
                (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
    }

【讨论】:

  • +1 是的,这是正确答案!!由于@user83676 在 oncreate 之前将 AudioManager 初始化为实例变量,因此它将不起作用。 Android 不允许在 onCreate 之前使用系统服务。
  • 这是有道理的,但是当我运行它时,我仍然收到大量错误消息。 LogCat 文件中有 300 多个! :(
  • @user83676 : 如果您仍然收到错误,请添加包含问题的 LogCat 文件
  • 添加了 logcat 的相关部分。它表明这是正确的答案(到目前为止)。但是,最新的几行表明您在其他地方遇到了不同的问题。您可能需要为此打开一个新问题。
  • 您还需要发布您的布局(xml)。您显然也在尝试将 TextView 用作按钮...
【解决方案2】:

这个

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button=(Button) findViewById(R.id.muteButton);
    button.setOnClickListener(this);
}

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

改成

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

 AudioManager audioManager =
                (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
        Button button=(Button) findViewById(R.id.muteButton);
        button.setOnClickListener(this);
    }

【讨论】:

  • 我复制粘贴了你所做的,但它不起作用!它仍然崩溃:(
  • 您需要将 audioManager 声明为成员变量,以便 onClick 可以访问它。此代码不会按原样工作。
  • 我一周前开始用java编码,我不知道发生了什么!哈哈。我该怎么做?
猜你喜欢
  • 2010-11-21
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多