我完成了無聲模式切換應用程序(android應用程序的傻瓜)的代碼。我的代碼與本書中的代碼完全相同,除了較新的android之外,幾乎沒有例外。一切工作正常,但如果我啓動應用程序,它會崩潰並顯示錯誤消息:不幸的是,靜默模式切換已停止。應用程序崩潰 - 無聲模式切換 - Android for Dummies
我發現問題與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;
}
}
如果我評論體內setButtonClickListener方法與//出來,使之具有隻是第一行左起:按鈕切換按鈕=(按鈕)findViewById( R.id.toggleButton);比應用程序不會崩潰。所以,不知怎的,setOnClickListener(帶有繼承的onClick)會造成麻煩。
我檢查了其他系統文件,但如前所述,沒有編譯錯誤,我也檢查了你的網站,但我還沒有發現這個問題。所以我現在不知道。
我將不勝感激任何想法和幫助。很抱歉可能是非常業餘的問題。 非常感謝! ž
您好,感謝您的回覆
您好,感謝您的回覆!
的是Android 4.4.2 在清單:
我希望這是你提到的堆棧跟蹤:
12月4日至7日:58:32.560:d/AndroidRuntime(2370):關閉VM
12月4日至7日:58:32.560:W/dalvikvm(2370):線程ID = 1:螺紋與未捕獲的異常(組= 0xb2a7aba8)離開
12月4日至7日:58:32.580:E/AndroidRuntime(2370):致命例外:main
十二月4日至七日:58:32.580:E/AndroidRuntime(2370):進程:com.dummies.android.silentmodetoggle,PID:2370
十二月4日至七日: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: E/AndroidRuntime(2370):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-07 12:58: read.handleLaunchActivity(ActivityThread.java:2245)
12月四日至7日: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):at android.os.Looper.loop(Looper.java:136)
04-07 12:58:32.580:E/AndroidRuntime(2370):at android.app.ActivityThread.main(ActivityThread.java:5017)
12月4日至7日:58:32.580:E/AndroidRuntime(2370):在java.lang.reflect.Method.invokeNative(本機方法)
十二月4日至7日:58:32.580:E/AndroidRuntime(2370):在java.lang.reflect.Method.invoke(Method.java:515)
十二月4日至7日:58:32.580:電子/ AndroidRuntime(2370):在
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
12月4日至7日: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方法)
12月4日至7日:58:32.580:E/AndroidRuntime(2370):顯示java.lang.NullPointerException
12月4日至7日:58:32.580:致E/AndroidRuntime(2370):在玉米.dummies.android.silentmodetoggle.MainActivity.setButtonClickListener(MainActivity.java:43)
一十二月4日至7日:58:32.580:E/AndroidRuntime(2370):在com.dummies.android.silentmodetoggle.MainActivity.onCreate( MainActivity.java:36)
十二月4日至七日:58:32.580:E/AndroidRuntime(2370):在android.app.Activity.performCreate(Activity.java:5231)
12月4日至7日:58:32.580:E/AndroidRuntime(2370):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12月4日至7日:58:32.580:E/AndroidRuntime (2370):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
12月4日至7日:58:32.580:E/AndroidRuntime(2370):... 11多個
你有一個堆棧跟蹤,你可以發佈?另外,你使用的是哪個版本的Android? – JTate
可以請你發佈logcat錯誤!所以我們可以以更好的方式幫助你! – geekCode
我重新格式化的問題,因此貓日誌是更好的可讀性,所以你不會得到頭疼,我希望 – user3435407