getRingerMode() 处的空指针异常 [英] null pointer exception at getRingerMode()

查看:22
本文介绍了getRingerMode() 处的空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了这个应用程序,用户可以通过单击图像按钮来切换静音模式:包 p.a;

I wrote this app where users can toggle silent mode by clicking on an image button: package p.a;

import android.media.AudioManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    ImageView imageView;
    AudioManager audioManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        final AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        View.OnClickListener onClickListener = new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                mode.toggle(audioManager);
                update();
            }
        };
        imageView.setOnClickListener(onClickListener);
    }

    public void update(){
        int mod=mode.phonesilent(audioManager)?
                R.drawable.ringer_off:
                R.drawable.ringer_on;
        }
    }

这是模式类:

package p.a;

import android.media.AudioManager;

/**
 * Created by root on 9/19/17.
 */

public class mode {
    public static boolean phonesilent(AudioManager audioManager){
        return audioManager.getRingerMode()==AudioManager.RINGER_MODE_SILENT;
    }

    public static void toggle(AudioManager audioManager){
        int mode = phonesilent(audioManager)?
                AudioManager.RINGER_MODE_NORMAL:
                AudioManager.RINGER_MODE_SILENT;
    }
}

应用程序可以正常初始化,但是当我单击图像图标时,它崩溃并在标题中产生错误消息.这是日志猫:

The app can be initialized normally, but when I click on the image icon, it crashes and produces the error message in the title. Here's the logcat:

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.media.AudioManager.getRingerMode()' on a null object reference
                                                         at p.a.mode.phonesilent(mode.java:11)
                                                         at p.a.MainActivity.update(MainActivity.java:29)
                                                         at p.a.MainActivity$1.onClick(MainActivity.java:22)

推荐答案

你可以按照 Vamshi Krishna 所说的去做,这完全是解决这个问题的好方法,但如果你因为某些原因不想实例化它,你可以将模式类"更改为模式静态类",如下所示:

You can do it as Vamshi Krishna says, it's totally a good answer for this problem, but if you don't want to instantiate it for some reason you could change "Mode class" to a "Mode static class" as follows:

package p.a;

import android.media.AudioManager;

/**
 * Created by root on 9/19/17.
 */

public static class mode {
    public static boolean phonesilent(AudioManager audioManager){
        return audioManager.getRingerMode()==AudioManager.RINGER_MODE_SILENT;
    }
    public static void toggle(AudioManager audioManager){
        int mode = phonesilent(audioManager)?
                AudioManager.RINGER_MODE_NORMAL:
                AudioManager.RINGER_MODE_SILENT;
    }
}

希望能帮到你!

这篇关于getRingerMode() 处的空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆