android:如何从非活动类开始新的活动?

android:如何从非活动类开始新的活动?,android,android-activity,Android,Android Activity,我正在实现一个游戏。当游戏到达一个特定位置时,我想开始一项新的活动。我是这个网站的新手,如果我的问题中缺少什么,请告诉我将进行编辑 我的Game.java文件有以下要点: Game.java package com.example.experiment; import android.content.Context; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Co

我正在实现一个游戏。当游戏到达一个特定位置时,我想开始一项新的活动。我是这个网站的新手,如果我的问题中缺少什么,请告诉我将进行编辑

我的Game.java文件有以下要点:

Game.java

package com.example.experiment;

import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.View;

public class Game extends View 
{
    int i=0,j=0;
    int hei=0,wid=0,div=0;
int MoUp=0,MoUpDo=0,Rd;
float TouchXU=0,TouchYU=0,TouchXD=0,TouchYD=0;
float CirX,CirY;
int Score=0,FinalScore;
boolean MoveUp=false,Move=false,NextObs=false;
Path Rpath=new Path();
Paint paint=new Paint();
String ScoreStr="";
GamEnd g=new GamEnd(getContext());
Intent intent=new Intent();
Context context;
public Game(Context context)
{
    super(context);
}
@Override
public void onDraw(Canvas canvas)
{
    super.onDraw(canvas);
    paint.setAntiAlias(true);
    setBackgroundColor(Color.parseColor("#3E8E21"));
    MainPath(canvas);
    Obstacle1(canvas);
    Ball(canvas);
    Scores(canvas);
}
public void Ball(Canvas canvas)
{
    CirX=getWidth()/2;
    CirY=(getHeight()/2+getHeight()/4);
    paint.setStyle(Paint.Style.STROKE);
    paint.setColor(Color.BLUE);
    paint.setStyle(Paint.Style.FILL);
    if(i<9)
    {
        postInvalidateDelayed(40);
        canvas.drawCircle(CirX, CirY+i, 30, paint);
        i+=3;
        Score+=10;
    }
    else if(MoveUp==true)
    {
        if(MoUp<200)
        {
            postInvalidateDelayed(30);
            canvas.drawCircle(CirX, CirY+i-MoUp, 30, paint);
            MoUp+=40;
            Score+=10;
        }
        else
        {
            postInvalidateDelayed(25);
            canvas.drawCircle(CirX, CirY+i-j+MoUpDo-MoUp, 30, paint);
            MoUpDo+=40;
            Score+=10;
            if(MoUpDo==200) 
            {
                MoUp=0;
                MoUpDo=0;
                MoveUp=false;
            }
        }
    }
    else
    {
        postInvalidateDelayed(40);
        canvas.drawCircle(CirX, CirY+i-j, 30, paint);
        j+=3;
        Score+=10;
        if(j==9) 
        {
            i=0;
            j=0;
        }
    }
    if(hei>=CirY-15 && hei<=CirY+10 && MoveUp==false)
    {
        FinalScore=Score;
        Intent in=new Intent(context,GameEndActivity.class);
        in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(in);
    }
}
public void MainPath(Canvas canvas)
{
    paint.setColor(Color.parseColor("#EE874B"));
    paint.setStyle(Paint.Style.FILL);
    Rpath.moveTo(getWidth()/2-getWidth()/6,0);
    Rpath.lineTo(getWidth()/2+getWidth()/6,0);
    Rpath.lineTo(getWidth()/2+getWidth()/3,getHeight());
    Rpath.lineTo(getWidth()/2-getWidth()/3,getHeight());
    Rpath.lineTo(getWidth()/2-getWidth()/6,0);
    canvas.drawPath(Rpath, paint);
    Rpath.reset();
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
    switch(event.getAction())
    {
    case MotionEvent.ACTION_DOWN:
        TouchXD=(float)event.getRawX();
        TouchYD=(float)event.getRawY();
        break;
    case MotionEvent.ACTION_UP:
        TouchXU=(float)event.getRawX();
        TouchYU=(float)event.getRawY();
        break;
    case MotionEvent.ACTION_MOVE:
        Move=true;
        break;
    }
    if(TouchYD>TouchYU && Move==true)
    {
        MoveUp=true;
        Move=false;
    }
    return true;
}
public void Scores(Canvas canvas)
{
    paint.setColor(Color.parseColor("#4CB028"));
    paint.setTextSize(20);
    paint.setTextSkewX((float) 0.1);
    paint.setFakeBoldText(true);
    ScoreStr=String.valueOf(Score);
    canvas.drawText(ScoreStr, 10, 30, paint);
}
public void Obstacle1(Canvas canvas)
{
    paint.setColor(Color.BLACK);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(20);
    canvas.drawLine(getWidth()/2-getWidth()/6-wid, hei, getWidth()/2+getWidth()/6+wid, hei, paint);
    float heiDiv=getHeight()/40;
    float widDiv=(getWidth()/3-getWidth()/6)/40;
    wid+=widDiv;
    hei+=heiDiv;
    if(hei>=getHeight())
    {
        NextObs=true;
        hei=0;
        wid=0;
        Obstacle1(canvas);
    }
}
GameEnd.java

package com.example.experiment;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class GameEnd extends View
{
    Paint paint=new Paint();
    public GameEnd(Context context)
    {
        super(context);
    }
    @Override
    public void onDraw(Canvas canvas)
    {
        setBackgroundColor(Color.BLACK);
        paint.setColor(Color.YELLOW);
        paint.setTextSize(50);
        canvas.drawText("Hello", 10, 100, paint);
    }
}
我的错误日志

08-28 09:24:20.120: E/AndroidRuntime(1153): FATAL EXCEPTION: main
08-28 09:24:20.120: E/AndroidRuntime(1153): Process: com.example.experiment, PID: 1153    
08-28 09:24:20.120: E/AndroidRuntime(1153): java.lang.NullPointerException
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.content.ComponentName.<init>(ComponentName.java:77)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.content.Intent.<init>(Intent.java:3813)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at com.example.experiment.Game.Ball(Game.java:94)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at com.example.experiment.Game.onDraw(Game.java:39)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.View.draw(View.java:14465)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.View.draw(View.java:14350)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.View.draw(View.java:14348)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.View.draw(View.java:14348)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.View.draw(View.java:14468)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.widget.FrameLayout.draw(FrameLayout.java:472)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2326)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2496)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewRootImpl.draw(ViewRootImpl.java:2409)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2253)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1883)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.Choreographer.doFrame(Choreographer.java:544)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.os.Handler.handleCallback(Handler.java:733)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.os.Handler.dispatchMessage(Handler.java:95)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.os.Looper.loop(Looper.java:136)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at android.app.ActivityThread.main(ActivityThread.java:5017)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at java.lang.reflect.Method.invokeNative(Native Method)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at java.lang.reflect.Method.invoke(Method.java:515)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-28 09:24:20.120: E/AndroidRuntime(1153):     at dalvik.system.NativeStart.main(Native Method)
08-2809:24:20.120:E/AndroidRuntime(1153):致命异常:main
08-28 09:24:20.120:E/AndroidRuntime(1153):进程:com.example.experience,PID:1153
08-28 09:24:20.120:E/AndroidRuntime(1153):java.lang.NullPointerException
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.content.ComponentName.(ComponentName.java:77)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.content.Intent.(Intent.java:3813)
08-28 09:24:20.120:E/AndroidRuntime(1153):位于com.example.experiment.Game.Ball(Game.java:94)
08-28 09:24:20.120:E/AndroidRuntime(1153):位于com.example.experience.Game.onDraw(Game.java:39)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.view.draw(view.java:14465)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.view.draw(view.java:14350)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewGroup.drawChild(ViewGroup.java:3103)上
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.view.draw(view.java:14348)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewGroup.drawChild(ViewGroup.java:3103)上
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.view.draw(view.java:14348)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewGroup.drawChild(ViewGroup.java:3103)上
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.view.draw(view.java:14468)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.widget.FrameLayout.draw(FrameLayout.java:472)
08-28 09:24:20.120:E/AndroidRuntime(1153):在com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2326)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2496)上
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewRootImpl.draw(ViewRootImpl.java:2409)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2253)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1883)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.Choreographer.doCallbacks(Choreographer.java:574)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.Choreographer.doFrame(Choreographer.java:544)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.os.Handler.handleCallback(Handler.java:733)上
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.os.Handler.dispatchMessage(Handler.java:95)上
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.os.Looper.loop(Looper.java:136)
08-28 09:24:20.120:E/AndroidRuntime(1153):在android.app.ActivityThread.main(ActivityThread.java:5017)上
08-28 09:24:20.120:E/AndroidRuntime(1153):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-28 09:24:20.120:E/AndroidRuntime(1153):位于java.lang.reflect.Method.invoke(Method.java:515)
08-28 09:24:20.120:E/AndroidRuntime(1153):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-28 09:24:20.120:E/AndroidRuntime(1153):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-28 09:24:20.120:E/AndroidRuntime(1153):在dalvik.system.NativeStart.main(本机方法)
我得到一个NullPointerException


请帮助。

如果我答对了你的问题,崩溃发生在
Ball()
方法中。是的,我们需要Game.java的代码,最好还有堆栈跟踪,以便100%确定NPE抛出的位置

然而,最可能的问题是
上下文设置不正确。

请检查一下。

更改此构造函数

 public Game(Context context)
 {
   super(context);
   this.context = context;
  }

您忘记将传入上下文设置为游戏的上下文属性

public Game(Context context) {
    super(context);
    this.context = context;
}
或删除该属性并使用视图的上下文:

Intent in = new Intent(((Activity)getContext()),GameEndActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
((Activity)getContext()).startActivity(in);
View getContext()通过返回视图运行的上下文 它可以访问当前主题、资源等


你能把整个错误信息都贴出来吗?也可能是你的Game.java:)@LokiSinclair你好,朋友们,我已经编辑了我的问题,并上传了我的Game.java和错误日志。请帮忙!!谢谢你,伙计,这起作用了。你能不能让我明白这是怎么工作的,因为我有点困惑,但这是有效的。这是有效的,因为对于非活动类,你需要将该类的上下文引用给它的构造函数。然后它就开始工作了。
Intent in = new Intent(((Activity)getContext()),GameEndActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
((Activity)getContext()).startActivity(in);