2015-11-18 3 views
1

Мне нужно установить значение по умолчанию для этого метода, потому что я имею сбой, когда данные не пересылаются методу, но вызывается метод.Предоставление строки по умолчанию для цветового метода

public int getTagColorFromColorStr(String colorStr) { 
    int color = Color.WHITE; 
    if (colorStr != null && colorStr.length() > 0) { 
     String[] parts = colorStr.split(AppConstant.TAG_COLOR_STR_SEPEATOR); 

     double red = Double.parseDouble(parts[0]) * 255; 
     double green = Double.parseDouble(parts[1]) * 255; 
     double blue = Double.parseDouble(parts[2]) * 255; 
     double alpha = Double.parseDouble(parts[3]); 

     // AppDebugLog.println("double color in getTagColorFromColorStr : " 
     // + red + " : " + green + " : " + blue 
     // + " : " + alpha); 
     color = Color.rgb((int) red, (int) green, (int) blue); 

    } 

Стек след аварии говорит:

11-18 14:45:57.767 28001-28001/com.mps.itickle E/AndroidRuntime: java.lang.NumberFormatException: Invalid double: "#FFFFFF" 

Значение, которое предоставляется метод, когда он работает выглядит следующим образом:

colorStr: "0.0,0.0,0.0,1.0" 

спасибо на ответы!

ответ

0

Fix здесь было исправить эту строку так:

if (colorStr != null && colorStr.length() > 0 && !colorStr.contains("#")) 

Проблема здесь в том, что значение #FFFFFF использовали вместо Строковое значение «0.0,0.0,0.0,0.0», так

String[] parts = colorStr.split(AppConstant.TAG_COLOR_STR_SEPEATOR); 

пытались расколоть #FFFFFF запятыми, и это приводило к сбою.

1

Color.White - это строковое значение, которое вы по умолчанию: «#FFFFFF». Это шестнадцатеричное значение, а не то, что вам нужно, потому что нет конверсий int. Вы должны преобразовать его в rgb, прежде чем поместить его в цвет. . Как это сделать: convert-hex-to-rgb

Преобразование альфы прямолинейно после этого. Это просто повторяет то же поведение для остальных шестнадцатеричных значений.

Для сакэ «FF» краткости шестнадцатиричное для 255 так белый 255255255