在android中从另一个类调用方法时出错
我有两节课。一个是mainbbaby.java,它包含:在android中从另一个类调用方法时出错,android,button,methods,Android,Button,Methods,我有两节课。一个是mainbbaby.java,它包含: public class MainBaby extends SurfaceView implements SurfaceHolder.Callback { public MainBaby(Context context){ super(context); init(); } public MainBaby(Context context, AttributeSet attrs) { super(contex
public class MainBaby extends SurfaceView implements SurfaceHolder.Callback {
public MainBaby(Context context){
super(context);
init();
}
public MainBaby(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
init();
}
public MainBaby(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
init();
}
public void init(){
// adding the callback (this) to the surface holder to intercept events
getHolder().addCallback(this);
// create the game loop thread
thread = new ThreadBaby(getHolder(), this);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
p = new Paint();
p.setAntiAlias(true);
p.setDither(true);
p.setColor(Color.BLACK);
p.setStyle(Paint.Style.STROKE);
p.setStrokeJoin(Paint.Join.ROUND);
p.setStrokeCap(Paint.Cap.ROUND);
p.setStrokeWidth(50);
setFocusable(true);
}
public void callMe(){
Log.v("tag", "the button successfully pressed");
}
}
该类在main.xml中已扩展
<AbsoluteLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<coba.gesture.Main
android:id="@+id/LayoDalam"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</AbsoluteLayout>
但当我单击按钮时,应用程序被强制关闭,下面是日志:
05-30 10:55:58.433: ERROR/AndroidRuntime(704): FATAL EXCEPTION: main
05-30 10:55:58.433: ERROR/AndroidRuntime(704): java.lang.NullPointerException
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at coba.gesture.CobaGesture$1.onClick(CobaGesture.java:41)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at android.view.View.performClick(View.java:2485)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at android.view.View$PerformClick.run(View.java:9080)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at android.os.Handler.handleCallback(Handler.java:587)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at android.os.Handler.dispatchMessage(Handler.java:92)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at android.os.Looper.loop(Looper.java:123)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at android.app.ActivityThread.main(ActivityThread.java:3647)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at java.lang.reflect.Method.invokeNative(Native Method)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at java.lang.reflect.Method.invoke(Method.java:507)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-30 10:55:58.433: ERROR/AndroidRuntime(704): at dalvik.system.NativeStart.main(Native Method)
这意味着什么?如何解决呢
先谢谢你
更新!
以下是编辑的代码和错误:
这是错误的原因。换句话说,您正在使用一个指向nothing或Null的变量。
如果您想在代码中使用其他类,您应该首先声明它
public void onClick(View v) {
MainBaby mb = new MainBaby(); //This initiates the variable correctly.
mb.callMe();
}
将对象mb初始化为mb=newmainbbaby(CobaGesture.this)在oncreate方法中,您应该使用正确的上下文初始化对象(在本例中,它是您的活动)。因此:
mb = new MainBaby(CobaGesture.this);
OR:
mb = new MainBaby(getApplicationContext());
将此代码放入onClick事件或onCreate中,这样您就可以使用mb.callMe()强>
所有关于上下文的内容都是和fromcallme()是android的一个方法,当我们按下任何按钮时,它在视图中被调用。
只需将此方法放在至少包含一个按钮的活动中,然后运行您的项目
public void callMe(View view){
Log.e("tag", "the button successfully pressed");
}
当我使用上面的代码时,它显示错误。它说“添加参数以匹配MainBaby(上下文)”,“添加参数以匹配MainBaby(上下文,attrs)”,“添加参数以匹配MainBaby(上下文,attrs,defStyle)”我没有注意到MainBaby类在构造函数中有参数,我的错误。我使用了上面的代码,它显示错误。上面写着“添加参数以匹配MainBaby(上下文)”,“添加参数以匹配MainBaby(上下文,attrs)”,“添加参数以匹配MainBaby(上下文,attrs,defStyle)”-我已经发布了图片。请检查它。查看编辑的代码,Mainbaby有带paramater的构造函数,因此在创建对象时,我们必须传递这个CabaGesture类的上下文。
mb = new MainBaby(CobaGesture.this);
OR:
mb = new MainBaby(getApplicationContext());
public void callMe(View view){
Log.e("tag", "the button successfully pressed");
}