2014-10-20 16 views
0

我正在使用下面的一段代碼來將字符串方程式解析爲一個結果double(基於double x,y和z以及方程式輸入的一些輸入值)。當我在eclipse中將它作爲java程序運行時,該程序運行良好,但是當它在android應用程序中運行時應用程序掛起(應用程序無響應)。在我的應用程序中,我從文本框中獲取字符串公式並顯示結果編號。任何人都可以告訴我爲什麼下面的代碼不能在android中工作?我的猜測是它與try-catch有關,但我無法弄清楚爲什麼。我正在使用exp4j jar。Try/catch不能與android表達式解析器一起使用exp4j

非常感謝!

public class ParseEquation { 

    public double totalValue = 0; 

    public ParseEquation(String inputEquation, double x, double y,double z) 
    { 
     //String inputEquation = "-4.14*x*x - 5/2 - y^2"; 
     Calculable calc = null; 
     try { 
      calc = new ExpressionBuilder(inputEquation) 
       .withVariable("x", x) 
       .withVariable("y", y) 
       .withVariable("z", z) 
       .build(); 
     } catch (UnknownFunctionException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (UnparsableExpressionException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     totalValue=calc.calculate(); 
    } 
} 
+0

您可以定義*「它失敗時,我在android應用程序中運行」*和*「不起作用」*?應用程序崩潰了嗎? Logcat中是否存在異常? – 2014-10-20 13:55:22

+0

日誌貓有文字:「10-20 10:00:03.501:D/dalvikvm(7043):GC_FOR_ALLOC釋放8191K,23%空閒51270K/66396K,暫停26ms,總共26ms」。不知道這是否有幫助。失敗,我的意思是我的android應用程序變得沒有響應,並且活動停止;我無法按任何按鈕或做任何事情。 – 2014-10-20 14:02:26

+0

對,這意味着一些長時間運行的操作阻止了主/ UI線程(ANR - Android Not Responding)。一般來說,Android會將線程狀態信息輸出到名爲'traces.txt'的文件中 - 查看線索。或者,查看您的代碼以確定潛在的長時間運行阻塞操作。您必須將其卸載到後臺/工作線程中,以便ui保持響應。 – 2014-10-20 14:14:36

回答

0

嘗試使用Log類的方法,帶3個參數。

public class ParseEquation { 

    public double totalValue = 0; 

    public ParseEquation(String inputEquation, double x, double y,double z) 
    { 
     //String inputEquation = "-4.14*x*x - 5/2 - y^2"; 
     Calculable calc = null; 
     try { 
      calc = new ExpressionBuilder(inputEquation) 
       .withVariable("x", x) 
       .withVariable("y", y) 
       .withVariable("z", z) 
       .build(); 
     } catch (UnknownFunctionException e) { 
      // TODO Auto-generated catch block 
      Log.e(getClass().getName(), "catch block1", e); 
     } catch (UnparsableExpressionException e) { 
      // TODO Auto-generated catch block 
      Log.e(getClass().getName(), "catch block2", e); 
     } 

     totalValue=calc.calculate(); 
    } 
} 
+0

仍然無響應。似乎有些東西佔用了大量的內存,但我無法弄清楚什麼。它在eclipse中工作正常且高效。 – 2014-10-20 14:22:19