尝试调用虚方法' void android.view.MotionEvent.setLocation(float,float)'在null对象引用上

时间:2018-05-08 21:35:56

标签: android

我有一个扩展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

1 个答案:

答案 0 :(得分:0)

在开始使用对象之前,必须初始化一个对象,在这种情况下,尝试在init MotionEvent recieved_event对象之前使用.setLocation(float, float)方法和recieved_event方法。