为了账号安全,请及时绑定邮箱和手机立即绑定

在空对象引用上接收“android.content.Context android.content.

在空对象引用上接收“android.content.Context android.content.

holdtom 2023-06-14 16:31:54
我是 android 开发和使用 java 编写脚本的新手。我正在尝试创建一个应用程序,允许我通过开关打开和关闭内部麦克风。我找到了两个脚本(一个开关脚本和一个麦克风控制脚本),我已经将它们放在一起,在我进行的过程中纠正了所有调试问题,目前脚本显示得很干净。但是,当它在手机或模拟器上运行时,它会立即崩溃并显示以下错误,android.content.Context android.content.Context.getApplicationContext()' on a null object reference”重点围绕我对 import android.content.Context; 的使用。该错误似乎是基于 Context.getApplicationContext 请求未能找到结果并因此发布 NULL。我看过一长串其他遭受类似领域困扰的人,但所有解决方案似乎都集中在对他们代码不同领域的更改上,而我无法将这些领域与我自己的脚本联系起来。package com.example.myfirstapp;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;import android.media.AudioManager;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Switch;public class MainActivity extends AppCompatActivity {    private Switch sw1;    Button btnGet;    Context context = getApplicationContext();    AudioManager audioManager = ((AudioManager)context.getSystemService(Context.AUDIO_SERVICE));    @Override    protected void onCreate(Bundle savedInstanceState) {        audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sw1 = findViewById(R.id.switch1);        btnGet = findViewById(R.id.getBtn);        btnGet.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (sw1.isChecked()) {                    audioManager.setMicrophoneMute(false);                }                else {                    audioManager.setMicrophoneMute(true);                }            }        });    }}即使脚本不起作用,预期的结果是我能够运行该应用程序,目前该应用程序在启动时崩溃并发布以下错误消息......
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您的问题是您试图在初始化时检索上下文,即。


Context context = getApplicationContext();

在创建活动之前,无法保证getApplicationContext();会返回有效值。在这种情况下,它是空的,当你试图在下一行访问它时,你会得到一个空指针异常。您需要context在onCreate()音频管理器中分配变量。


例如,像这样:


    Context context;

    AudioManager audioManager;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        context = getApplicationContext();

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

    ...

    }

另一件需要注意的事情是该类Activity是 的子类Context,因此您无需检索您可以编写的应用程序上下文


    AudioManager audioManager;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

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

    ...

    }


查看完整回答
反对 回复 2023-06-14
?
ibeautiful

TA贡献1993条经验 获得超5个赞

我想,这里的问题是这一行:


Context context = getApplicationContext();

不要将其初始化为类字段,而是在onCreate()方法内部对其进行初始化。例如:


public class MainActivity extends AppCompatActivity {


private Switch sw1;

Button btnGet;

Context context;

AudioManager audioManager;

@Override

protected void onCreate(Bundle savedInstanceState) {



    super.onCreate(savedInstanceState);

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

    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);

    context = getApplicationContext();


    setContentView(R.layout.activity_main);

    sw1 = findViewById(R.id.switch1);

    btnGet = findViewById(R.id.getBtn);

    .

    .


查看完整回答
反对 回复 2023-06-14
  • 2 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信