Я строю простой калькулятор, и я хотел проверить свои вычисления с помощью проверенного калькулятора WolframAlpha, но у меня возникли проблемы с согласованностью. Я программирую это, чтобы узнать больше об Android, Java и XML. Большая часть этого кода берется непосредственно из файла WolframAlphaSample.java и упрощается, чтобы возвращать только нужные нам элементы (информацию).WolframAlpha API вызывает исключение в Android, но не консоль
В моей ActivityMain.java я передать функции моего EditText:
Double wolframAnswer = WolframAlpha.queryInput(editLine.getText().toString());
В WolframAlpha.queryInput() мой код выглядит следующим образом:
public static double queryInput(String input)
{
WAEngine engine = new WAEngine();
System.out.println("Wolfram Input: " + input);
// These properties will be set in all the WAQuery objects created from this WAEngine.
engine.setAppID(appid);
engine.addFormat("plaintext");
engine.addIncludePodID("DecimalApproximation");
engine.addIncludePodID("Result");
WAQuery query = engine.createQuery(); // Create the query.
query.setInput(input); // Sets property of the query.
double finalResult = 0.0;
try {
// This sends the URL to the Wolfram|Alpha server, gets the XML result
// and parses it into an object hierarchy held by the WAQueryResult object.
WAQueryResult queryResult = engine.performQuery(query);
//System.out.println(((WAPlainText)(queryResult.getPods()[0].getSubpods()[0].getContents()[0])).getText());
String unroundedResult;
if (queryResult.isError())
{
return 1.0; // error
}
else if (!queryResult.isSuccess())
{
return 2.0; // misunderstood
}
else if(queryResult.getPods().length == 1)
{
unroundedResult = ((WAPlainText)(queryResult.getPods()[0].getSubpods()[0].getContents()[0])).getText();
if (unroundedResult.endsWith("...")) // Remove trailing dots if really long number
{
unroundedResult = unroundedResult.replaceAll("\\.\\.\\.", "");
}
}
else
{
unroundedResult = ((WAPlainText)(queryResult.getPods()[1].getSubpods()[0].getContents()[0])).getText();
}
finalResult = Double.parseDouble(unroundedResult);
} catch (WAException e) {
e.printStackTrace();
}
return finalResult;
}
}
Когда мы запустим это из консоли в WolframAlpha .java с простым запросом (5 + 8), он отлично работает, если мы запустим его из нашего Android-приложения, которое передает одни и те же данные, оно ловит и генерирует исключение. Любая идея, почему мы видим два разных поведения?
Маленькое примечание: возврат 1.0 и 2.0 не самая лучшая идея, но была выбрана, потому что я не уверен, как вернуть ошибку, которая не является двойной, и я хотел отладить то, что происходило, в любом случае, это не так, но я оставил его здесь.
Было бы очень полезно разместить частичную дорожку стека. –