简体   繁体   中英

Switch case issue(Android)

I am creating project of bouncing balls in which I take input from the user the number of balls he/she want to bounce.Then I am using switch case to write further code according to number user entered.When I am not using switch case and executing the project without taking input from user according to number of balls I want to bounce it works well..but with switch case it creates problem..when i open the screen which should display balls bouncing it shows error"Unfortunately,application has stopped"...Here is the code part which creates problem..

package com.example.preliminarytest;
import android.content.Context;

import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.util.AttributeSet;
import android.app.Activity;
import android.view.View;
import android.widget.Toast;
public class AnimationView extends View{
  private final int FRAME_RATE=15;
  private Paint paint;
  private Handler h;
  Ball myball;
  Ball greenball;
  Ball redball;
  Ball cyanball;
  Ball yellowball;
  Ball greyball;
  Ball magentaball;
  Ball grey;
  int value;
  public void setString(int value)
  {
     this.value = value;
     System.out.println("value="+value);
  }

    public AnimationView(Context context,AttributeSet attrs) {
        super(context,attrs);
        // TODO Auto-generated constructor stub

        h=new Handler();
        paint=new Paint();
        paint.setColor(Color.BLUE);
        switch(value)
        {
        case 1:
            myball=new Ball(100,100,Color.BLUE,50);
            myball.setDX(10);
            myball.setDY(10);
            break;
        case 2:
            myball=new Ball(100,100,Color.BLUE,50);
            greenball=new Ball(200,200,Color.GREEN,50);
            myball.setDX(10);
            myball.setDY(10);
            greenball.setDX(10);
            greenball.setDY(10);
            break;
        case 3:
            myball=new Ball(100,100,Color.BLUE,50);
            greenball=new Ball(200,200,Color.GREEN,50);
            redball=new Ball(50,400,Color.RED,50);
            myball.setDX(10);
            myball.setDY(10);
            greenball.setDX(10);
            greenball.setDY(10);
            redball.setDX(10);
            redball.setDY(10);
            break;
        case 4:
            myball=new Ball(100,100,Color.BLUE,50);
            greenball=new Ball(200,200,Color.GREEN,50);
            redball=new Ball(50,400,Color.RED,50);
            cyanball=new Ball(100,300,Color.CYAN,50);
            myball.setDX(10);
            myball.setDY(10);
            greenball.setDX(10);
            greenball.setDY(10);
            redball.setDX(10);
            redball.setDY(10);
            cyanball.setDX(10);
            cyanball.setDY(10);
            break;
        case 5:
            myball=new Ball(100,100,Color.BLUE,50);
            greenball=new Ball(200,200,Color.GREEN,50);
            redball=new Ball(50,400,Color.RED,50);
            cyanball=new Ball(100,300,Color.CYAN,50);
            yellowball=new Ball(10,300,Color.YELLOW,50);
            myball.setDX(10);
            myball.setDY(10);
            greenball.setDX(10);
            greenball.setDY(10);
            redball.setDX(10);
            redball.setDY(10);
            cyanball.setDX(10);
            cyanball.setDY(10);
            yellowball.setDX(10);
            yellowball.setDY(10);
            break;
        case 6: 
            myball=new Ball(100,100,Color.BLUE,50);
            greenball=new Ball(200,200,Color.GREEN,50);
            redball=new Ball(50,400,Color.RED,50);
            cyanball=new Ball(100,300,Color.CYAN,50);
            yellowball=new Ball(10,300,Color.YELLOW,50);
            magentaball=new Ball(150,300,Color.MAGENTA,50);
            myball.setDX(10);
            myball.setDY(10);
            greenball.setDX(10);
            greenball.setDY(10);
            redball.setDX(10);
            redball.setDY(10);
            cyanball.setDX(10);
            cyanball.setDY(10);
            yellowball.setDX(10);
            yellowball.setDY(10);
            magentaball.setDX(10);
            magentaball.setDY(10);
            break;
        case 7:
            myball=new Ball(100,100,Color.BLUE,50);
            greenball=new Ball(200,200,Color.GREEN,50);
            redball=new Ball(50,400,Color.RED,50);
            cyanball=new Ball(100,300,Color.CYAN,50);
            yellowball=new Ball(10,300,Color.YELLOW,50);
            magentaball=new Ball(150,300,Color.MAGENTA,50);
            grey=new Ball(100,150,Color.GRAY,50);
            myball.setDX(10);
            myball.setDY(10);
            greenball.setDX(10);
            greenball.setDY(10);
            redball.setDX(10);
            redball.setDY(10);
            cyanball.setDX(10);
            cyanball.setDY(10);
            yellowball.setDX(10);
            yellowball.setDY(10);
            magentaball.setDX(10);
            magentaball.setDY(10);
            grey.setDX(10);
            grey.setDY(10);
            break;
            default:System.out.println("invalid value");


        }



    }
    protected void onDraw(Canvas c)
    {
        switch(value)
        {
        case 1:
            myball.bounce(c);
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            break;
        case 2:
            myball.bounce(c);
            greenball.bounce(c);
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
            break;
        case 3:
            myball.bounce(c);
            greenball.bounce(c);
            redball.bounce(c);
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
            c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
            break;
        case 4:
            myball.bounce(c);
            greenball.bounce(c);
            redball.bounce(c);
            cyanball.bounce(c);
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
            c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
            c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
            break;
        case 5:
            myball.bounce(c);
            greenball.bounce(c);
            redball.bounce(c);
            cyanball.bounce(c);
            yellowball.bounce(c);
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
            c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
            c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
            c.drawCircle(yellowball.getX(), yellowball.getY(),yellowball.getRadius(), yellowball.getPaint());
            break;
        case 6:

            myball.bounce(c);
            greenball.bounce(c);
            redball.bounce(c);
            cyanball.bounce(c);
            yellowball.bounce(c);
            magentaball.bounce(c);
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
            c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
            c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
            c.drawCircle(yellowball.getX(), yellowball.getY(),yellowball.getRadius(), yellowball.getPaint());
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
            c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
            c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
            c.drawCircle(magentaball.getX(), magentaball.getY(),magentaball.getRadius(), magentaball.getPaint());
            break;

        case 7:
            myball.bounce(c);
            greenball.bounce(c);
            redball.bounce(c);
            cyanball.bounce(c);
            yellowball.bounce(c);
            magentaball.bounce(c);
            greyball.bounce(c);
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
            c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
            c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
            c.drawCircle(yellowball.getX(), yellowball.getY(),yellowball.getRadius(), yellowball.getPaint());
            c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
            c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
            c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
            c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
            c.drawCircle(magentaball.getX(), magentaball.getY(),magentaball.getRadius(), magentaball.getPaint());
            c.drawCircle(greyball.getX(), greyball.getY(),greyball.getRadius(), greyball.getPaint());
            break;
        default:System.out.println("invalid value");
        }

h.postDelayed(r, FRAME_RATE);

    }
    private Runnable r=new Runnable()
    { public void run()
    { invalidate();
    }
    };
    }

And here is the errors shown on Logcat

04-08 17:37:55.288: E/AndroidRuntime(685): FATAL EXCEPTION: main
04-08 17:37:55.288: E/AndroidRuntime(685): java.lang.NullPointerException
04-08 17:37:55.288: E/AndroidRuntime(685):  at com.example.preliminarytest.AnimationView.onDraw(AnimationView.java:162)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.View.draw(View.java:13458)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.View.draw(View.java:13342)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.View.draw(View.java:13340)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.View.draw(View.java:13461)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.widget.FrameLayout.draw(FrameLayout.java:467)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.View.draw(View.java:13342)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.View.draw(View.java:13340)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.View.draw(View.java:13461)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.widget.FrameLayout.draw(FrameLayout.java:467)
04-08 17:37:55.288: E/AndroidRuntime(685):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2183)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2258)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewRootImpl.draw(ViewRootImpl.java:2153)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2021)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1832)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.Choreographer.doCallbacks(Choreographer.java:555)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.Choreographer.doFrame(Choreographer.java:525)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.os.Handler.handleCallback(Handler.java:615)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.os.Looper.loop(Looper.java:137)
04-08 17:37:55.288: E/AndroidRuntime(685):  at android.app.ActivityThread.main(ActivityThread.java:4745)
04-08 17:37:55.288: E/AndroidRuntime(685):  at java.lang.reflect.Method.invokeNative(Native Method)
04-08 17:37:55.288: E/AndroidRuntime(685):  at java.lang.reflect.Method.invoke(Method.java:511)
04-08 17:37:55.288: E/AndroidRuntime(685):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-08 17:37:55.288: E/AndroidRuntime(685):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-08 17:37:55.288: E/AndroidRuntime(685):  at dalvik.system.NativeStart.main(Native Method)

There is something null as it is clearly written in logcat output. NullPointerException at line no 162 of AnimationView.java. Please check this line. may be you are using some variable that is never initialized.

Hey you are getting NullPonterException in onDraw() method. You can do something like this to avoid crashing of app.

protected void onDraw(Canvas c)
{
if(value>0){
Log.e("Value","Value ="+value);
    switch(value)
    {
     // your code.
    }
}
else{
Log.e("Exception","Null Value");
}

This will avoid crashing of your app.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM