I have been trying for some time now to get a variable from MySurfaceView to use in my Player class. I cant seem to make it work... I tried getting the touch information from my MainActivity class but it wasn't really where I wanted it and also couldn't seem to make it work. Any help is appreciated!
MySurfaceView.java
package com.Frenchie.SurfaceView;
import ...
public class MySurfaceView extends SurfaceView implements Runnable {
    Bitmap bitmap;
    SurfaceHolder surfaceHolder;
    int LastTouchx;
    Player player;
    public MySurfaceView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        player = new Player(context);
        surfaceHolder = getHolder();
        //Starts the run()
        Thread TestThread = new Thread(this);
        TestThread.start();
    }
    @Override
    public void run() {
        //TODO movement here when display is working
        while (true){
            Update();
            DrawPlayer();
        }
    }
    public void Update(){
        player.Update();
    }
    public void DrawPlayer(){
        Canvas canvas = surfaceHolder.lockCanvas();
        if (surfaceHolder.getSurface().isValid()) {
            canvas.drawColor(Color.BLUE);
            canvas.drawBitmap(player.getBitmap(), player.getX(), player.getY(), null);
            surfaceHolder.unlockCanvasAndPost(canvas);
        }
        else{
            Log.d("DrawPlayer", "Surface Not Valid");
        }
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        LastTouchx = (int)event.getX();
        //LastTouchy= (int)event.getY();
        Log.d("Touch Value ",LastTouchx+"");
        return false;
    }
    public int getLastTouchx() {
        return LastTouchx;
    }
}
Player.java
package com.Frenchie.SurfaceView;
import ...
public class Player {
    //Bitmap to get character from image
    private Bitmap bitmap;
    //coordinates
    private int x;
    private int y;
    //motion speed of the character
    private int speed = 0;
    MySurfaceView mySurfaceView;
    //constructor
    public Player(Context context) {
        x = 75;
        y = 500;
        //Getting bitmap from drawable resource
        bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.player);
    }
    //Method to update coordinate of character
    public void Update(){
        //updating x coordinate
        if (x > mySurfaceView.getLastTouchx()){
            x++;
        }
        else if (x < mySurfaceView.getLastTouchx()){
            x--;
        }
        else{
            Log.d("Update","Else triggered");
        }
    }
    public Bitmap getBitmap() {
        return bitmap;
    }
    public int getX() {
        return x;
    }
    public int getY() {
        return y;
    }
}
Messages
E/AndroidRuntime: FATAL EXCEPTION: Thread-4
    Process: com.Frenchie.SurfaceView, PID: 26348
    java.lang.NullPointerException: Attempt to invoke virtual method 'int com.Frenchie.SurfaceView.MySurfaceView.getLastTouchx()' on a null object reference
        at com.Frenchie.SurfaceView.Player.Update(Player.java:36)
        at com.Frenchie.SurfaceView.MySurfaceView.Update(MySurfaceView.java:68)
        at com.Frenchie.SurfaceView.MySurfaceView.run(MySurfaceView.java:62)
        at java.lang.Thread.run(Thread.java:762)
This was not a duplicate of the post suggested.
 
     
    