3

I have been trying for ages to get this to work and I want it so that I can put both checkedChanged in one OnCheckedChanged method. What I have so far doesn't work, but as I had it before with only one case, without the switch statement worked. Please can you look at my code and see how I can fix it to make it work?

Here is the code:

public class MainActivity extends Activity implements OnClickListener, OnCheckedChangeListener {

    Button sensorButton;
    Button newScreen;
    Switch vibrateToggle;
    Switch lightsToggle;
    NotificationManager nm1;
    NotificationManager nm2;
    static final int uniqueID1 = 12345;
    static final int uniqueID2 = 54321;
    OnCheckedChangeListener vibrateListener;
    OnCheckedChangeListener lightsListener;

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

        sensorButton = (Button)this.findViewById(R.id.sensorButton);
        sensorButton.setOnClickListener(this);

        newScreen = (Button)this.findViewById(R.id.newScreen);
        newScreen.setOnClickListener(this);

        nm1 = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm1.cancel(uniqueID1);

        nm2 = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm2.cancel(uniqueID2); 

        vibrateToggle = (Switch)this.findViewById(R.id.switch1);
        vibrateToggle.setOnCheckedChangeListener(vibrateListener);

        lightsToggle = (Switch)this.findViewById(R.id.lightSwitch);
        lightsToggle.setOnCheckedChangeListener(lightsListener);    
    }


    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // TODO Auto-generated method stub
        switch(buttonView.getId()){

        case R.id.switch1:
            Toast.makeText(this, "Vibrate Notification is " + (isChecked ? "ON" : "OFF"),
                Toast.LENGTH_SHORT).show();
                if (isChecked) {
                    // The toggle is enabled
                    Intent vibrateIntent = new Intent(this, MainActivity.class);
                    PendingIntent vibratePi = PendingIntent.getActivity(this, 0, vibrateIntent, 0);
                    NotificationCompat.Builder vibrateN = new NotificationCompat.Builder(this);
                    vibrateN.setContentIntent(vibratePi);
                    vibrateN.setDefaults(Notification.DEFAULT_VIBRATE);
                    Notification vn = vibrateN.build();
                    nm2.notify(uniqueID2, vn);
                } else {
                    // The toggle is disabled
                }

        case R.id.lightSwitch:
            Toast.makeText(this, "Lights Notification is " + (isChecked ? "ON" : "OFF"),
                    Toast.LENGTH_SHORT).show();
                    if (isChecked) {
                        // The toggle is enabled
                        Intent lightsIntent = new Intent(this, MainActivity.class);
                        PendingIntent lightsPi = PendingIntent.getActivity(this, 0, lightsIntent, 0);
                        NotificationCompat.Builder lightsN = new NotificationCompat.Builder(this);
                        lightsN.setContentIntent(lightsPi);
                        lightsN.setDefaults(Notification.DEFAULT_LIGHTS);
                        Notification ln = lightsN.build();
                        nm2.notify(uniqueID2, ln);
                    } else {
                        // The toggle is disabled
                    }

             break;
        }
    }

This is the logcat that I get:

03-14 16:46:21.139: D/dalvikvm(532): Not late-enabling CheckJNI (already on)
03-14 16:46:22.218: I/dalvikvm(532): threadid=3: reacting to signal 3
03-14 16:46:22.338: I/dalvikvm(532): Wrote stack traces to '/data/anr/traces.txt'
03-14 16:46:22.728: I/dalvikvm(532): threadid=3: reacting to signal 3
03-14 16:46:22.739: I/dalvikvm(532): Wrote stack traces to '/data/anr/traces.txt'
03-14 16:46:23.238: I/dalvikvm(532): threadid=3: reacting to signal 3
03-14 16:46:23.278: I/dalvikvm(532): Wrote stack traces to '/data/anr/traces.txt'
03-14 16:46:23.509: D/gralloc_goldfish(532): Emulator without GPU emulation detected.
03-14 16:46:25.258: D/AndroidRuntime(532): Shutting down VM
03-14 16:46:25.258: W/dalvikvm(532): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-14 16:46:25.288: E/AndroidRuntime(532): FATAL EXCEPTION: main
03-14 16:46:25.288: E/AndroidRuntime(532): java.lang.IllegalStateException: Could not find a method onSwitchToggle(View) in the activity class com.example.sensor.MainActivity for onClick handler on view class android.widget.Switch with id 'switch1'
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.view.View$1.onClick(View.java:3031)
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.view.View.performClick(View.java:3511)
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.widget.CompoundButton.performClick(CompoundButton.java:100)
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.view.View$PerformClick.run(View.java:14105)
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.os.Handler.handleCallback(Handler.java:605)
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.os.Looper.loop(Looper.java:137)
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.app.ActivityThread.main(ActivityThread.java:4424)
03-14 16:46:25.288: E/AndroidRuntime(532):  at java.lang.reflect.Method.invokeNative(Native Method)
03-14 16:46:25.288: E/AndroidRuntime(532):  at java.lang.reflect.Method.invoke(Method.java:511)
03-14 16:46:25.288: E/AndroidRuntime(532):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-14 16:46:25.288: E/AndroidRuntime(532):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-14 16:46:25.288: E/AndroidRuntime(532):  at dalvik.system.NativeStart.main(Native Method)
03-14 16:46:25.288: E/AndroidRuntime(532): Caused by: java.lang.NoSuchMethodException: onSwitchToggle [class android.view.View]
03-14 16:46:25.288: E/AndroidRuntime(532):  at java.lang.Class.getConstructorOrMethod(Class.java:460)
03-14 16:46:25.288: E/AndroidRuntime(532):  at java.lang.Class.getMethod(Class.java:915)
03-14 16:46:25.288: E/AndroidRuntime(532):  at android.view.View$1.onClick(View.java:3024)
03-14 16:46:25.288: E/AndroidRuntime(532):  ... 12 more
03-14 16:46:25.948: I/dalvikvm(532): threadid=3: reacting to signal 3
03-14 16:46:25.958: I/dalvikvm(532): Wrote stack traces to '/data/anr/traces.txt'
Barney
  • 2,355
  • 3
  • 22
  • 37
James Meade
  • 1,147
  • 5
  • 22
  • 46

1 Answers1

4

As in log:

NoSuchMethodException: onSwitchToggle [class android.view.View]

means you have added an android:onClick="onSwitchToggle" attribute in Switch View xml but you forgot to define the method in your Activity code.

Because you are adding setOnCheckedChangeListener() to Switch View in Activity, then there's no need to set onClick() inside the XML for the Switch View. Just remove the android:onClick="onSwitchToggle" attribute from XML.

xarlymg89
  • 2,552
  • 2
  • 27
  • 41
ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213