ivitySWITCH案例事项(ANDROID)

ivitySWITCH案例事项(ANDROID),android,Android,我从用户那里获取数字输入 他/她想要弹起的球的数量。然后我使用开关盒根据用户输入的数字编写进一步的代码。 我需要在animationview构造函数之前调用setString()方法,以便初始化变量“value”。因此,我在“animationview=(animationview)findViewById(R.id.animationview);“是否正确?”之前加上“animationview.setString(文本)”;“不幸的是,应用程序已停止”后会显示错误..当我在setString

我从用户那里获取数字输入 他/她想要弹起的球的数量。然后我使用开关盒根据用户输入的数字编写进一步的代码。 我需要在animationview构造函数之前调用setString()方法,以便初始化变量“value”。因此,我在“animationview=(animationview)findViewById(R.id.animationview);“是否正确?”之前加上“animationview.setString(文本)”;“不幸的是,应用程序已停止”后会显示错误..当我在setString()方法之前调用AnimationView构造函数时,会显示相同的错误..问题是在调用switch之前未初始化变量值还是其他问题

SecondActivity.java

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;

public class SecondActivity extends Activity {
    AnimationView animationview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent i = getIntent(); 
        int text = i.getIntExtra("TextBox",3); 
        System.out.println(text);
        setContentView(R.layout.activity_two);
        animationview.setString(text);
        animationview=(AnimationView)findViewById(R.id.animationView);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
AnimationView.java

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();
    }
    };
    }
Logcat错误消息

04-08 18:45:39.325: E/AndroidRuntime(670): FATAL EXCEPTION: main
04-08 18:45:39.325: E/AndroidRuntime(670): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.preliminarytest/com.example.preliminarytest.SecondActivity}: java.lang.NullPointerException
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.os.Looper.loop(Looper.java:137)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.app.ActivityThread.main(ActivityThread.java:4745)
04-08 18:45:39.325: E/AndroidRuntime(670):  at java.lang.reflect.Method.invokeNative(Native Method)
04-08 18:45:39.325: E/AndroidRuntime(670):  at java.lang.reflect.Method.invoke(Method.java:511)
04-08 18:45:39.325: E/AndroidRuntime(670):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-08 18:45:39.325: E/AndroidRuntime(670):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-08 18:45:39.325: E/AndroidRuntime(670):  at dalvik.system.NativeStart.main(Native Method)
04-08 18:45:39.325: E/AndroidRuntime(670): Caused by: java.lang.NullPointerException
04-08 18:45:39.325: E/AndroidRuntime(670):  at com.example.preliminarytest.SecondActivity.onCreate(SecondActivity.java:25)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.app.Activity.performCreate(Activity.java:5008)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
04-08 18:45:39.325: E/AndroidRuntime(670):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
04-08 18:45:39.325: E/AndroidRuntime(670):  ... 11 more
activity_two.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

   <com.example.preliminarytest.AnimationView
       android:id= "@+id/animationView"
       android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>

您以错误的顺序访问animationView。是吗

 animationview.setString(text);
 animationview=(AnimationView)findViewById(R.id.animationView);
但应该是这样

 animationview=(AnimationView)findViewById(R.id.animationView);
 animationview.setString(text);
编辑。
我看了你的
AnimationView
课程。只能在视图的构造函数中初始化类成员。例如,您可以创建一个方法,
initBall
,将构造函数中的开关/案例逻辑放入其中,并在分配
value
后,将此方法调用到构造函数和
setString
。这将是解决问题的更快方法。

您以错误的顺序访问animationView。是吗

 animationview.setString(text);
 animationview=(AnimationView)findViewById(R.id.animationView);
animationview.setString(text);
animationview=(AnimationView)findViewById(R.id.animationView);
但应该是这样

 animationview=(AnimationView)findViewById(R.id.animationView);
 animationview.setString(text);
编辑。 我看了你的
AnimationView
课程。只能在视图的构造函数中初始化类成员。例如,您可以创建一个方法,
initBall
,将构造函数中的开关/案例逻辑放入其中,并在分配
value
后,将此方法调用到构造函数和
setString
。这将是解决问题的更快方法

animationview.setString(text);
animationview=(AnimationView)findViewById(R.id.animationView);
这是颠倒的

哦,我明白了,您正在尝试在设置“值”之前初始化视图,但值尚未初始化。您需要输入默认值,或更改代码

这是颠倒的


哦,我明白了,您正在尝试在设置“值”之前初始化视图,但值尚未初始化。您需要输入一个默认值,或者更改代码。

我在帖子中写道,即使按照您所说的顺序调用,它也会显示相同的输出。..post activity\u two.xml.activity\u two.xml postedI请参阅。但是当你反向调用时,你会得到一个NPE,但是在AnimationView内部,而不是在活动内部。我错了吗?我在我的帖子中写道,即使我按照你说的顺序调用,它也会显示相同的输出。post activity_two.xml.activity_two.xml postedI see。但是当你反向调用时,你会得到一个NPE,但是在AnimationView内部,而不是在活动内部。我错了吗?现在知道了。我在方法内部使用开关而不是构造函数,并从setString()方法调用了该方法。我在方法内部使用开关而不是构造函数,并从setString()方法调用了该方法。再次,我更改了答案再次,我更改了答案