2012-08-02 74 views
0

我有一個非常非常混亂的方法。我想從處理程序返回ints。我的代碼是這樣的:從處理程序返回整數

public void getCasesFromFolder() { 

    msg = handler.obtainMessage(); 


    timer.schedule(new TimerTask(){ 
      public void run(){ 
       if(folder.list().length == 0) { 
        msg.obj = "0"; 
        handler.sendMessage(msg); 
       } 

       else { 
        msg.obj = Integer.toString(folder.list().length) ; 
        handler.sendMessage(msg); 
       } 

      } 
    }, delay, 3000); 
} 

private Handler handler = new Handler() { 

    @SuppressWarnings("unchecked") 
    @Override 
    public void handleMessage(Message m) { 

     String message = (String) m.obj; 
     if(message.equals("0")) { 
      returnValues(0); 
     } 
     else { 
      returnValues(Integer.parseInt(message)); 
     } 

    } 

    public int returnValues(int i) { 

     if(i == 0) 
      return 0; 
     else 
      return i; 

    } 
}; 

這當然不起作用。我怎樣才能從處理程序返回一個int?

+0

如果你想分享更多的背景知識,這可能會有所幫助。 – 2012-08-02 13:25:10

回答

2

在類中創建一個int屬性,並使您的處理程序在handleMessage()方法中設置其值,而不是返回它。

順便說一句,你的returnValues()方法是完全無用的,因爲它可以簡化爲return i;,它只是返回參數。

+0

+1爲了嘗試實際建議一種解決方法,而不是直言不能說明。 – 2012-08-02 13:25:50

1

它不起作用,因爲void不能返回任何東西。另外這個功能:

public int returnValues(int i) { 

     if(i == 0) 
      return 0; 
     else 
      return i; 

    } 

什麼也沒做。此外,您不以任何方式操縱對象。您正在調用returnValues函數,該函數不對Handler對象的任何屬性執行突變(或設置操作)。這意味着當你調用returnValues時,你只是放棄了結果,因爲它會超出範圍。

+0

Handler是他實現的接口,機會是簽名方法不會被改變。而且他明顯想要的是在方法執行後從當前類訪問int的方法,他無法使用此解決方案。 – kgautron 2012-08-02 13:26:12

+0

@KayKay,我的迴應中究竟有什麼不正確?虛空不返回任何東西,他的腋窩功能也無能爲力。我明確表示OP需要一個增變器。事實上,我的答案几乎與你的答案完全相同,所以我沒有看到抱怨。 – Woot4Moo 2012-08-02 13:28:18

+0

我從來沒有說過這是不正確的。我只是說它沒有解決問題。 – kgautron 2012-08-02 13:30:08