我有一个扩展DrawingView
类的View
类。在DrawingView
类中,我定义了一个websocket客户端,客户端接收一个String并将其分成几部分,每个部分将插入到MotionEvent
对象中。然后,该对象通过同一类中的onTouchEvent
函数发送,稍后处理。所以我的问题是使用它时recieved_event
为空。此外,如果我在本地而不是全局定义它,Android Studio认为Object应该设置为null。有没有办法使用recieved_event
而不会出现空错误?
public class DrawingView extends View{
MotionEvent recieved_event;
public DrawingView(Context context, AttributeSet attr){
super(context,attr);
//the client socket is started
}
private final class EchoWebSocketListener extends WebSocketListener {
private static final int NORMAL_CLOSURE_STATUS = 1000;
@Override
public void onOpen(WebSocket webSocket, Response response) {
webSocket.send("Hello!");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
if(text.contains("!!!!")){
String[] event_attrs = text.split("!!!!");
//The recieved_event is null
recieved_event.setLocation(Float.parseFloat(event_attrs[1]), Float.parseFloat(event_attrs[2]));
recieved_event.setAction(Integer.parseInt(event_attrs[0]));
onTouchEvent(recieved_event);
}
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
webSocket.close(NORMAL_CLOSURE_STATUS, null);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
}
}
}
我得到的错误:
Attempt to invoke virtual method 'void android.view.MotionEvent.setLocation(float, float)' on a null object reference
答案 0 :(得分:0)
在开始使用对象之前,必须初始化一个对象,在这种情况下,尝试在init MotionEvent recieved_event
对象之前使用.setLocation(float, float)
方法和recieved_event
方法。