gpt4 book ai didi

java - 运行 Android 应用程序时出错

转载 作者:行者123 更新时间:2023-11-29 21:20:09 25 4
gpt4 key购买 nike

我制作了一个简单的 android 应用程序,用户可以通过单击按钮在静音模式和静音模式之前的状态之间切换,但是当在模拟器或 android 设备上运行该应用程序时,消息“应用程序已意外停止”正在显示。我的代码有什么问题。

P.S.:我从 Android for Dummies 复制了代码,并做了一些小修改,例如更改照片的名称。

这是我的代码:包 com.example.silentmodetoggle;

import android.widget.Button;
import android.media.AudioManager;
import android.view.*;
import android.os.Bundle;
import android.app.Activity;
import android.widget.ImageView;
import android.graphics.drawable.Drawable;


public class MainActivity extends Activity{
private AudioManager mAudioManager;
private boolean mPhoneIsSilent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);



setButtonClickListener();
checkIfPhoneIsSilent();

mAudioManager=(AudioManager)getSystemService(AUDIO_SERVICE);

}
private void setButtonClickListener(){
Button toggleButton=(Button)findViewById(R.id.toggleButton);
toggleButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(mPhoneIsSilent){
//change back to normal mode
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
mPhoneIsSilent=false;
}
else
{
//change to silent mode
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
mPhoneIsSilent=true;
}

//now toggle the UI again
toggleUi();




}
});
}

private void checkIfPhoneIsSilent(){
int ringerMode=mAudioManager.getRingerMode();
if(ringerMode==AudioManager.RINGER_MODE_SILENT){
mPhoneIsSilent=true;}
else
mPhoneIsSilent=false;

}

// Toggles the UI images from silent to normal and vice versa.

private void toggleUi()
{
ImageView imageView=(ImageView)findViewById(R.id.phone_icon);
Drawable newPhoneImage;

if(mPhoneIsSilent){
newPhoneImage=getResources().getDrawable(R.drawable.silent);
}
else{
newPhoneImage=getResources().getDrawable(R.drawable.ringer);
}
imageView.setImageDrawable(newPhoneImage);

}


@Override
protected void onResume() {
super.onResume();
checkIfPhoneIsSilent();
toggleUi();
}









}

这是 AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:background="#ffffff"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ImageView
android:id="@+id/phone_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:contentDescription="@+id/desc"
android:src="@drawable/ringer" />

<Button
android:id="@+id/toggleButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/phone_icon"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:text="Toggle_Silent_Mode" />

</RelativeLayout>

LogCat 中显示以下内容:

12-29 21:21:31.475: E/AndroidRuntime(821): FATAL EXCEPTION: main
12-29 21:21:31.475: E/AndroidRuntime(821): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.silentmodetoggle/com.example.silentmodetoggle.MainActivity}: java.lang.NullPointerException
12-29 21:21:31.475: E/AndroidRuntime(821): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
12-29 21:21:31.475: E/AndroidRuntime(821): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-29 21:21:31.475: E/AndroidRuntime(821): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-29 21:21:31.475: E/AndroidRuntime(821): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-29 21:21:31.475: E/AndroidRuntime(821): at android.os.Handler.dispatchMessage(Handler.java:99)
12-29 21:21:31.475: E/AndroidRuntime(821): at android.os.Looper.loop(Looper.java:123)
12-29 21:21:31.475: E/AndroidRuntime(821): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-29 21:21:31.475: E/AndroidRuntime(821): at java.lang.reflect.Method.invokeNative(Native Method)
12-29 21:21:31.475: E/AndroidRuntime(821): at java.lang.reflect.Method.invoke(Method.java:521)
12-29 21:21:31.475: E/AndroidRuntime(821): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-29 21:21:31.475: E/AndroidRuntime(821): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-29 21:21:31.475: E/AndroidRuntime(821): at dalvik.system.NativeStart.main(Native Method)
12-29 21:21:31.475: E/AndroidRuntime(821): Caused by: java.lang.NullPointerException
12-29 21:21:31.475: E/AndroidRuntime(821): at com.example.silentmodetoggle.MainActivity.checkIfPhoneIsSilent(MainActivity.java:58)
12-29 21:21:31.475: E/AndroidRuntime(821): at com.example.silentmodetoggle.MainActivity.onCreate(MainActivity.java:23)
12-29 21:21:31.475: E/AndroidRuntime(821): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-29 21:21:31.475: E/AndroidRuntime(821): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

最佳答案

在实例化 AudioManager 之前调用 checkIfPhoneIsSilent。这会导致 NullPointerException。更改您的 onCreate 方法以解决此问题:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mAudioManager=(AudioManager)getSystemService(AUDIO_SERVICE);

setButtonClickListener();
checkIfPhoneIsSilent();
}

关于java - 运行 Android 应用程序时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20830316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com