getRingerMode()处的空指针异常

时间:2017-09-20 10:24:27

标签: java android android-studio debugging

我写了这个应用程序,用户可以通过单击图像按钮来切换静音模式:     包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;
    }
}

应用程序可以正常初始化,但是当我单击图像图标时,它会崩溃并在标题中生成错误消息。 这是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)

2 个答案:

答案 0 :(得分:0)

首先创建一个这样的模式对象:

Mode mode = new Mode();

答案 1 :(得分:0)

你可以这样做,因为Vamshi Krishna说,这对于这个问题来说是一个很好的答案,但是如果你不想因某种原因实例化它,可以将“Mode class”更改为“Mode static class”,如下所示:

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;
    }
}

希望它有所帮助!