0

Я получил свой первый отчет о сбоях для своего приложения. Он говорит, что есть java.lang.ArithmeticException: divide by zeroКак определить, какое значение равно 0?

Исключение одного из этих двух линий:

//sWP stands for "Screen Width in Pixels" 
// sW stands for "Screen Width" The code is old though, so I may be incorrect for both variables. 
//res is just getResources() 
int sWP = sW/(res.getDisplayMetrics().densityDpi/DisplayMetrics.DENSITY_DEFAULT); 
float bHeight = 50 * ((float)res.getDisplayMetrics().densityDpi/DisplayMetrics.DENSITY_DEFAULT); 

Может DisplayMetrics.DENSITY_DEFAULT когда-либо быть нулевым? Или может getDisplayMetrics().densityDpi когда-либо быть нулевым?

ответ

0

res.getDisplayMetrics().densityDpi будет 120, 160 или 240 (или что-то подобное), см. https://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi.

DisplayMetrics.DENSITY_DEFAULT постоянно равно 160, см. https://developer.android.com/reference/android/util/DisplayMetrics.html#DENSITY_DEFAULT.

res.getDisplayMetrics().densityDpi/DisplayMetrics.DENSITY_DEFAULT вернет 0, потому что вы разделите int на int.

Изменение первого из двух линий

int sWP = (int) sW/(((double) res.getDisplayMetrics().densityDpi)/DisplayMetrics.DENSITY_DEFAULT);

и он должен работать.

+0

Должен ли я также изменить sWP на двойной? Также в этом случае res.getDisplayMetrics(). ПлотностьDpi равна 320 – Roymunson

+0

@Roymunson Изменение sWP для двойного значения для меня не имеет смысла, как вы говорите _ // sWP означает «Ширина экрана в пикселях» _. Извините, я забыл бросить на int. Я отредактирую свой ответ. –

+0

@ Roymunson Что касается значения 320, которое вы получаете за плотность Dpi, кто-то забыл изменить документацию для плотности Dpi из API 4 при введении DENSITY_XHIGH в API 9. –

Смежные вопросы