以下是我的代码的一部分:
public class Result extends Fragment{
BigInteger sumCipher = BigInteger.ZERO;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.result, container, false);
return rootView;
}
@Override
public void onStart() {
super.onStart();
new AsyncGetSumCipher().execute();
}
public void setSumCipher(BigInteger sum){
this.sumCipher = sum;
}
public BigInteger getSumCipher(){
return sumCipher;
}
}
AsyncGetSumCipher类显然包含doInBackground和onPostExecute。后者如下:
protected void onPostExecute(StringBuilder result) {
super.onPostExecute(result);
BigInteger bi = new BigInteger(result.toString());
setSumCipher(bi);
}
有人可以帮帮我吗?我已经坚持了好几个星期了:(
答案 0 :(得分:0)
我猜你的result.toString()
会返回无效的bigInt。请记录下来,看看价值是多少。
这取自oracle文档:
<强>的BigInteger 强>
构造函数:public BigInteger(String val)
将BigInteger的十进制字符串表示形式转换为BigInteger。字符串表示由可选的减号后跟一个或多个十进制数字的序列组成。字符到数字的映射由Character.digit提供。 字符串可能不包含任何无关的字符(例如,空格)。
参数: val - BigInteger的十进制字符串表示。
抛出:
NumberFormatException
- val不是BigInteger的有效表示。
另见:
Character.digit(char, int)
https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(java.lang.String)
答案 1 :(得分:0)
通过执行以下操作解决了问题:
BigInteger bi = new BigInteger(result.toString().trim().replaceAll("\"",""));