2014-04-07 90 views
1

我完成了無聲模式切換應用程序(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多個

+1

你有一個堆棧跟蹤,你可以發佈?另外,你使用的是哪個版本的Android? – JTate

+0

可以請你發佈logcat錯誤!所以我們可以以更好的方式幫助你! – geekCode

+0

我重新格式化的問題,因此貓日誌是更好的可讀性,所以你不會得到頭疼,我希望 – user3435407

回答

1

我有解決了這個問題(只是在我的筆記本電腦飛出我的窗戶之前)。

然而,解決方案構成了一些其他問題。

因此,首先,如果有人有同樣的問題,我這樣做:

我已經改變了擴展類的活動。你將不得不導入它。

您將不得不在onCreate方法中刪除或評論'if'。

並將setContentView的參數更改爲:R.layout。fragment_main(我有ImageView和在fragment_main中的按鈕)

嗯,它現在可以工作,但它並不意味着我真的不會解決問題,因爲'extends ActionBarAcitivity'是一個默認設置,你會期望它會起作用。

但我是新來這個,所以我不知道......

我會做在這個題目我的研究進一步,但如果你們能對此有何評論,究竟是什麼原因,究竟是什麼現在改變了,等等,我真的很感激它!

謝謝

+0

這有助於。在這之後可能出現的問題在這裏描述:http://stackoverflow.com/questions/39151453/in-android-7-api-level-24-my-app-is-不被允許到靜音電話設置振鈴模式 –