2012-08-02 51 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