亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在空對象引用上接收“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條經驗 獲得超6個贊

我想,這里的問題是這一行:


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 關注
  • 287 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號