2014-10-04 32 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); 


    } 
}