java NullPointerException Android Handler


    public class MainActivity extends ActionBarActivity {   
    Handler myHandler;
    Runnable myRunnable;
    TextView tv;
    int no;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myHandler.post(myRunnable);
    }
    public void initialize(){
        no = 10;
        tv = (TextView) findViewById(R.id.textView1);
        myRunnable = new Runnable() {
            @Override
            public void run() {
                tv.setText(Integer.toString(no));
                no--;
                if(no != 0)
                myHandler.postDelayed(myRunnable, 1000);
            }
        };
    }
}

我尝试强制方向纵向运行此代码,但它再次失败。

每当我尝试处理程序在每秒基本上更改视图文本时,我都会收到此错误。

我是Android开发的新手,是一名大学生,所以如果有的话,请忍受我的错误。

提前谢谢你。

日志如下。

    10-04 04:22:35.750: E/AndroidRuntime(2123):FATAL EXCEPTION: main
    10-04 04:22:35.750: E/AndroidRuntime(2123):java.lang.RuntimeException: Unable to start activity ComponentInfo{we.funnycorps.handlerpractise/we.funnycorps.handlerpractise.MainActivity}: java.lang.NullPointerException
    10-04 04:22:35.750: E/AndroidRuntime(2123):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    10-04 04:22:35.750: E/AndroidRuntime(2123):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)

你还没有在oncreate中使用initialize()函数,在代码使用下面,你会得到预期的结果。

public class Dummycls extends Activity {
Handler myHandler;
Runnable myRunnable;
TextView tv;
int no;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
//myHandler.post(myRunnable);
}
public void initialize(){
no = 10;
tv = (TextView) findViewById(R.id.pinchTitleText);
myHandler=new Handler();
myRunnable = new Runnable(){
    public void run() {
        tv.setText(Integer.toString(no));
        no--;
        if(no != 0)
        myHandler.postDelayed(myRunnable, 1000);
        //handler.postDelayed(r, 1000);

    }
}; 
myHandler.post(myRunnable);

   }
 }

myHandler初始化为

Handler myHandler = new Handler();

即替换

Handler myHandler;

 Handler myHandler = new Handler();

并在myHandler.post(myRunnable);之前调用initialize()方法

initialize();
myHandler.post(myRunnable);

myHandler 没有被初始化,并且由于 initialize(( 方法没有在你的 onCreate(( 中被调用,所以在你尝试发布它之前,myRunnable 也没有被初始化。

最新更新