2 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
您的問題是您試圖在初始化時(shí)檢索上下文,即。
Context context = getApplicationContext();
在創(chuàng)建活動(dòng)之前,無法保證getApplicationContext();會(huì)返回有效值。在這種情況下,它是空的,當(dāng)你試圖在下一行訪問它時(shí),你會(huì)得到一個(gè)空指針異常。您需要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,因此您無需檢索您可以編寫的應(yīng)用程序上下文
AudioManager audioManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
audioManager = ((AudioManager)getSystemService(Context.AUDIO_SERVICE));
...
}

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
我想,這里的問題是這一行:
Context context = getApplicationContext();
不要將其初始化為類字段,而是在onCreate()方法內(nèi)部對(duì)其進(jìn)行初始化。例如:
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);
.
.
添加回答
舉報(bào)