2014-10-04 184 views
0
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); 
      } 
     }; 
    } 
} 

我试图强制方向肖像运行此代码,但它再次失败。java NullPointerException Android的处理程序

每当我尝试一个处理程序基本上改变每秒后查看文本我得到这个错误。

对于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) 
+2

你在哪里调用'initialize'方法。你应该调用它onCreate – Panther 2014-10-04 04:38:53

+1

你还没有初始化myHandler,也没有调用initialize()方法,所以在调用myHandler.post(myRunnable)时都是NULL。 – 2014-10-04 04:45:27

回答

0

将myHandler没有被初始化,而且由于initialize()方法不会被调用你的onCreate(),myRunnable您尝试发布之前,也不会被初始化。

1

初始化myHandler作为

Handler myHandler = new Handler(); 

即替换

Handler myHandler; 

Handler myHandler = new Handler(); 

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

initialize(); 
myHandler.post(myRunnable); 
2

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

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); 


    } 
}