這有很多麻煩。它運(yùn)行在Android Nougat和Marshmallow上,但在棒棒糖上它不起作用(主要是我的fireTV)。我遇到了問(wèn)題。任何想法為什么這是崩潰?java.lang.ArithmeticException: divide by zerolong startTime = System.currentTimeMillis();InputStream is = response.body().byteStream();BufferedInputStream bis = new BufferedInputStream(is);long size = 0;int red = 0;byte[] buf = new byte[1024];while ((red = bis.read(buf)) != -1) { size += red;}long endTime = System.currentTimeMillis();Log.d("ERROR CHECK", startTime + " " + endTime + " " + size);double rate = (((size / 1024) / ((endTime - startTime) / 1000)) * 8); // THIS IS WHERE MY PROBLEM IS - A ZERO // SOMEWHERE.Log.d("ERROR CHECK", "No Zeros....");rate = Math.round(rate * 100.0) / 100.0;String ratevalue;if (rate > 1000) ratevalue = String.valueOf(rate / 1024).concat(" Mbps");else ratevalue = String.valueOf(rate).concat(" Kbps");if (is != null) { is.close();}if (bis != null) { bis.close();}Log.d("download", "download speed = " + ratevalue);我用注釋指出的行是問(wèn)題所在。該行中的所有值都已填充,我在它之前簽入了 Log.d 行。
2 回答

www說(shuō)
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)分母由于微小差異而變?yōu)榱銜r(shí),它會(huì)崩潰。使用雙精度值,檢查分母,如果為零,則創(chuàng)建一些值(如1或0.1),如下所示。
double den = (endTime - startTime) / 1000.0)) * 8.0 ;
if(den==0) den= 0.1;
double rate = (((size / 1024) / (den);
我認(rèn)為像這樣的代碼會(huì)解決你的崩潰問(wèn)題。
添加回答
舉報(bào)
0/150
提交
取消