Android 将MotionEvent从回调函数传递给类方法,导致;异常调度输入事件“;

Android 将MotionEvent从回调函数传递给类方法,导致;异常调度输入事件“;,android,joystick,Android,Joystick,我正在编写Android代码来处理操纵杆输入,简单的情况下效果很好,但当我尝试将MotionEvent传递给类方法时,我得到: 09-01 10:36:48.358:E/InputEventReceiver(8079):异常调度输入事件。 09-01 10:36:48.358:D/AndroidRuntime(8079):关闭虚拟机 09-01 10:36:48.358:W/dalvikvm(8079):threadid=1:线程以未捕获异常退出(组=0x418f32a0) 09-01 10:3

我正在编写Android代码来处理操纵杆输入,简单的情况下效果很好,但当我尝试将MotionEvent传递给类方法时,我得到:

09-01 10:36:48.358:E/InputEventReceiver(8079):异常调度输入事件。
09-01 10:36:48.358:D/AndroidRuntime(8079):关闭虚拟机
09-01 10:36:48.358:W/dalvikvm(8079):threadid=1:线程以未捕获异常退出(组=0x418f32a0)
09-01 10:36:48.368:E/AndroidRuntime(8079):致命异常:主
09-01 10:36:48.368:E/AndroidRuntime(8079):java.lang.NullPointerException
09-01 10:36:48.368:E/AndroidRuntime(8079):在com.example.inputtest.MainActivity.onGenericMotionEvent(MainActivity.java:60)
09-01 10:36:48.368:E/AndroidRuntime(8079):在android.app.Activity.dispatchGenericMotionEvent(Activity.java:2435)上
09-01 10:36:48.368:E/AndroidRuntime(8079):在
有效的代码:

package com.example.input测试;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.Menu;
导入android.view.MotionEvent;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
私有文本视图输出;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
outp=(TextView)findViewById(R.id.outp);
outp.setText((CharSequence)“还没有输入”);
}
@凌驾
公共布尔值onGenericMotionEvent(MotionEvent mevt){
outp.setText((CharSequence)“MotionEvent”);
if(mevt.getAction()==MotionEvent.ACTION\u MOVE){
outp.setText((CharSequence)String.valueOf(mevt.getAxisValue(MotionEvent.AXIS_X));
返回true;
}
返回false;
}
}
不符合以下条件的代码:

package com.example.input测试;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.KeyEvent;
导入android.view.Menu;
导入android.view.MotionEvent;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
私有文本视图输出;
私有wikipadController wikipadController=新的wikipadController();
私有类wikipadController{
私人浮动leftJoyX,leftJoyY,rightJoyX,rightJoyY;
公共wikipadController(){
leftJoyX=0;
leftJoyY=0;
rightJoyX=0;
右Y=0;
}
公共无效更新(MotionEvent mevt){
leftJoyX=mevt.getAxisValue(MotionEvent.AXIS_X);
leftJoyY=mevt.getAxisValue(MotionEvent.AXIS_Y);
rightJoyX=mevt.getAxisValue(MotionEvent.AXIS_Z);
rightJoyY=mevt.getAxisValue(MotionEvent.AXIS_RZ);
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
outp=(TextView)findViewById(R.id.outp);
outp.setText((CharSequence)“还没有输入”);
}
@凌驾
公共布尔值onGenericMotionEvent(MotionEvent mevt){
outp.setText((CharSequence)“MotionEvent”);
if(mevt.getAction()==MotionEvent.ACTION\u MOVE){
wikipadController.update(mevt);
outp.setText(String.format(“左:%d,%d右:%d,%d”,
wikipadController.leftJoyX,
wikipadController.LeftJoey,
wikipadController.rightJoyX,
wikipadController.rightJoey));
返回true;
}
返回false;
}       
}
你不能传递一个动作事件吗?我需要复印一下吗

private float leftJoyX, leftJoyY, rightJoyX, rightJoyY;
leftJoyX、leftJoyY、righjoyx、righjoyy
被声明为浮点数

outp.setText(String.format("left: %d, %d right: %d, %d",
                     wikipadController.leftJoyX,
                     wikipadController.leftJoyY,
                     wikipadController.rightJoyX,
                     wikipadController.rightJoyY));
您使用的格式(
%d
)是十进制格式。请改用以下方法:

outp.setText(String.format("left: %f, %f right: %f, %f",
                     wikipadController.leftJoyX,
                     wikipadController.leftJoyY,
                     wikipadController.rightJoyX,
                     wikipadController.rightJoyY));

好吧,那就行了!为什么我不能得到一个更合理的错误,即是什么使这成为一个NullPointerException?@foobrabby我本来希望在这里看到一个
IllegalArgumentException
。你能看看你的航海日志吗?您应该有一个导致NPE的
IllegalArgumentException