应用程序崩溃 - 无声模式切换 - Android for Dummies

时间:2014-04-07 16:46:14

标签: android crash toggle mode silent

我完成了静音模式切换应用程序的代码(Android应用程序的假人)。我的代码与书中的代码完全相同,但由于更新的android,因此几乎没有例外。一切正常,但如果我启动应用程序,它会崩溃并显示错误消息:不幸的是,静默模式切换已停止。

我发现问题与setOnClickListener方法有关。

没有一点编译错误,eclipse说一切都很酷。

守则的相关部分:

 package com.dummies.android.silentmodetoggle;

 import android.support.v7.app.ActionBarActivity;
 import android.support.v7.app.ActionBar;
 import android.support.v4.app.Fragment;
 import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.os.Build;

 public class MainActivity extends ActionBarActivity {

private AudioManager mAudioManager;
private boolean mPhoneIsSilent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ////////////////////////////////////////////////////////////////////////////
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }
    /////////////////////////////////////////////////////////////////////////////

    mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
    checkIfPhoneIsSilent();
    setButtonClickListener();

}

    private void setButtonClickListener(){

    Button toggleButton = (Button) findViewById(R.id.toggleButton);
    toggleButton.setOnClickListener (new View.OnClickListener() {

            public void onClick (View v){

            if (mPhoneIsSilent) {
            mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                mPhoneIsSilent=false;
            } else {
            mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                mPhoneIsSilent=true;
            }
 //             toggleUi();
        }
    });
}

    private void checkIfPhoneIsSilent(){
        int ringerMode = mAudioManager.getRingerMode();
        if (ringerMode == AudioManager.RINGER_MODE_SILENT){
            mPhoneIsSilent = true;
        } else {
            mPhoneIsSilent = false;
        }
    }

如果我用// out注释setButtonClickListener方法的主体,那么它只剩下第一行:Button toggleButton =(Button)findViewById(R.id.toggleButton);比应用程序不崩溃。所以,不知何故,setOnClickListener(继承的onClick)会造成麻烦。

我检查了其他系统文件,但如上所述,没有编译错误,我也检查了你的网站,但我还没有找到这个问题。所以我现在不知道。

我很感激任何想法和帮助。对不起,可能非常业余的问题。 非常感谢你! ž


嗨,谢谢你的回复

你好,谢谢你的回复!

Android 4.4.2 在清单中:      

我希望这是你提到的堆栈跟踪:

04-07 12:58:32.560:D / AndroidRuntime(2370):关闭虚拟机

04-07 12:58:32.560:W / dalvikvm(2370):threadid = 1:线程退出未捕获的异常(group = 0xb2a7aba8)

04-07 12:58:32.580:E / AndroidRuntime(2370):致命异常:主

04-07 12:58:32.580:E / AndroidRuntime(2370):进程:com.dummies.android.silentmodetoggle,PID:2370

04-07 12:58:32.580:E / AndroidRuntime(2370):java.lang.RuntimeException:无法启动活动ComponentInfo {com.dummies.android.silentmodetoggle / com.dummies.android.silentmodetoggle.MainActivity}:显示java.lang.NullPointerException

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread.access $ 800(ActivityThread.java:135)

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.os.Handler.dispatchMessage(Handler.java:102)

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.os.Looper.loop(Looper.java:136)

04-07 12:58:32.580:E / AndroidRuntime(2370):at android.app.ActivityThread.main(ActivityThread.java:5017)

04-07 12:58:32.580:E / AndroidRuntime(2370):at java.lang.reflect.Method.invokeNative(Native Method)

04-07 12:58:32.580:E / AndroidRuntime(2370):at java.lang.reflect.Method.invoke(Method.java:515)

04-07 12:58:32.580:E / AndroidRuntime(2370):at

com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)

04-07 12:58:32.580:E / AndroidRuntime(2370):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

04-07 12:58:32.580:E / AndroidRuntime(2370):at dalvik.system.NativeStart.main(Native Method)

04-07 12:58:32.580:E / AndroidRuntime(2370):引起:java.lang.NullPointerException

04-07 12:58:32.580:E / AndroidRuntime(2370):at com.dummies.android.silentmodetoggle.MainActivity.setButtonClickListener(MainActivity.java:43)

04-07 12:58:32.580:E / AndroidRuntime(2370):at com.dummies.android.silentmodetoggle.MainActivity.onCreate(MainActivity.java:36)

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.Activity.performCreate(Activity.java:5231)

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)

04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)

04-07 12:58:32.580:E / AndroidRuntime(2370):... 11更多

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题(就在我的笔记本电脑飞出窗外之前及时)。

然而,该解决方案还提出了其他一些问题。

首先,如果有人遇到同样的问题,我就这样做了:

我已将扩展类更改为Activity。你必须导入它。

您必须删除或评论' if'在onCreate方法中。

并将setContentView的参数更改为:R.layout.fragment_main(我在fragment_main中有ImageView和Button)

嗯,它现在有效,但它并不意味着我真的不知道为什么,以及问题是什么,因为'扩展了ActionBarAcitivity'是一个默认设置,您可以预期它会起作用。

但我是新手,所以我不知道......

我会进一步研究这个话题,但如果你们可以对此发表评论,原因是什么,现在究竟有什么变化等等,我真的很感激!

谢谢