我在TextView上使用setText()获取java.lang.NullPointerException

时间:2016-01-16 20:37:38

标签: java android textview

public class MainActivity extends Activity{ 

TextView datumText;
GestureDetector gestureDetector;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Gestures
    datumText = (TextView) findViewById(R.id.datumText);
    datumText.setText("ma");
    gestureDetector = new GestureDetector(this, new GestureListener());

    datumText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            gestureDetector.onTouchEvent(event);
            return true;
        }
    });
}
}

class GestureListener implements GestureDetector.OnGestureListener{

MainActivity mainActivity = new MainActivity();

public GestureListener(){

}

@Override
public boolean onDown(MotionEvent e) {
    return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
    return false;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    return false;
}

@Override
public void onLongPress(MotionEvent e) {

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    mainActivity.datumText.setText("di");
    return true;
}
}

我想更改

上的文字
TextView datumText;

每当我在屏幕上的TextView上进行onFling运动时。但我得到一个NullPointerException,我认为这是因为我试图在null对象上调用setText()方法。

提前致谢!

编辑:忘记提及我使用MainActivity类和第二类。 EDIT2:我知道NullPointerException是由什么引起的,但我不知道如何解决它。

2 个答案:

答案 0 :(得分:0)

您正在创建MainActivity的新实例,并且不会将任何布局扩展到该实例,您尝试访问在新创建的MainActivity实例中甚至不存在的TextView。只需将你的onFling()改为

即可
  @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    datumText.setText("di"); // you don't need to create instance of your MainActivity to access the TextView
    return true; }

答案 1 :(得分:0)

不要像这样创建一个新的MainActivity实例: MainActivity mainActivity = new MainActivity();

如果您愿意,可以传递TextView本身。

class GestureListener implements GestureDetector.OnGestureListener{

...
...
TextView tv;

public void setTextView(Textview tv){
this.tv = tv;
}
...
}

然后执行类似

的操作
  @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    tv.setText("di"); 
    return true; }