我完成了静音模式切换应用程序的代码(Android应用程序的假人)。我的代码与书中的代码完全相同,但由于更新的android,因此几乎没有例外。一切正常,但如果我启动应用程序,它会崩溃并显示错误消息:不幸的是,静默模式切换已停止。
我发现问题与setOnClickListener方法有关。
没有一点编译错误,eclipse说一切都很酷。
守则的相关部分:
package com.dummies.android.silentmodetoggle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private AudioManager mAudioManager;
private boolean mPhoneIsSilent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
////////////////////////////////////////////////////////////////////////////
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
/////////////////////////////////////////////////////////////////////////////
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
checkIfPhoneIsSilent();
setButtonClickListener();
}
private void setButtonClickListener(){
Button toggleButton = (Button) findViewById(R.id.toggleButton);
toggleButton.setOnClickListener (new View.OnClickListener() {
public void onClick (View v){
if (mPhoneIsSilent) {
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
mPhoneIsSilent=false;
} else {
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
mPhoneIsSilent=true;
}
// toggleUi();
}
});
}
private void checkIfPhoneIsSilent(){
int ringerMode = mAudioManager.getRingerMode();
if (ringerMode == AudioManager.RINGER_MODE_SILENT){
mPhoneIsSilent = true;
} else {
mPhoneIsSilent = false;
}
}
如果我用// out注释setButtonClickListener方法的主体,那么它只剩下第一行:Button toggleButton =(Button)findViewById(R.id.toggleButton);比应用程序不崩溃。所以,不知何故,setOnClickListener(继承的onClick)会造成麻烦。
我检查了其他系统文件,但如上所述,没有编译错误,我也检查了你的网站,但我还没有找到这个问题。所以我现在不知道。
我很感激任何想法和帮助。对不起,可能非常业余的问题。 非常感谢你! ž
嗨,谢谢你的回复
你好,谢谢你的回复!
Android 4.4.2 在清单中:
我希望这是你提到的堆栈跟踪:
04-07 12:58:32.560:D / AndroidRuntime(2370):关闭虚拟机
04-07 12:58:32.560:W / dalvikvm(2370):threadid = 1:线程退出未捕获的异常(group = 0xb2a7aba8)
04-07 12:58:32.580:E / AndroidRuntime(2370):致命异常:主
04-07 12:58:32.580:E / AndroidRuntime(2370):进程:com.dummies.android.silentmodetoggle,PID:2370
04-07 12:58:32.580:E / AndroidRuntime(2370):java.lang.RuntimeException:无法启动活动ComponentInfo {com.dummies.android.silentmodetoggle / com.dummies.android.silentmodetoggle.MainActivity}:显示java.lang.NullPointerException
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread.access $ 800(ActivityThread.java:135)
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.os.Handler.dispatchMessage(Handler.java:102)
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.os.Looper.loop(Looper.java:136)
04-07 12:58:32.580:E / AndroidRuntime(2370):at android.app.ActivityThread.main(ActivityThread.java:5017)
04-07 12:58:32.580:E / AndroidRuntime(2370):at java.lang.reflect.Method.invokeNative(Native Method)
04-07 12:58:32.580:E / AndroidRuntime(2370):at java.lang.reflect.Method.invoke(Method.java:515)
04-07 12:58:32.580:E / AndroidRuntime(2370):at
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
04-07 12:58:32.580:E / AndroidRuntime(2370):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-07 12:58:32.580:E / AndroidRuntime(2370):at dalvik.system.NativeStart.main(Native Method)
04-07 12:58:32.580:E / AndroidRuntime(2370):引起:java.lang.NullPointerException
04-07 12:58:32.580:E / AndroidRuntime(2370):at com.dummies.android.silentmodetoggle.MainActivity.setButtonClickListener(MainActivity.java:43)
04-07 12:58:32.580:E / AndroidRuntime(2370):at com.dummies.android.silentmodetoggle.MainActivity.onCreate(MainActivity.java:36)
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.Activity.performCreate(Activity.java:5231)
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-07 12:58:32.580:E / AndroidRuntime(2370):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-07 12:58:32.580:E / AndroidRuntime(2370):... 11更多
答案 0 :(得分:1)
我已经解决了这个问题(就在我的笔记本电脑飞出窗外之前及时)。
然而,该解决方案还提出了其他一些问题。
首先,如果有人遇到同样的问题,我就这样做了:
我已将扩展类更改为Activity。你必须导入它。
您必须删除或评论' if'在onCreate方法中。
并将setContentView的参数更改为:R.layout.fragment_main(我在fragment_main中有ImageView和Button)
嗯,它现在有效,但它并不意味着我真的不知道为什么,以及问题是什么,因为'扩展了ActionBarAcitivity'是一个默认设置,您可以预期它会起作用。
但我是新手,所以我不知道......
我会进一步研究这个话题,但如果你们可以对此发表评论,原因是什么,现在究竟有什么变化等等,我真的很感激!
谢谢