2014-08-31 85 views
0

我有一个问题,改变背景颜色随机:
首先,我尝试使用parseColor在Colorclass:解析色VS解析INT

public class Colors { 

     public String[] colors = { 
      "#39add1", // light blue 
      "#3079ab", // dark blue 
      "#c25975" // mauve 
     }; 

     public int getcolor() { 
      Random randomGenerator = new Random(); 
      String color = ""; 

      int randomNumber = randomGenerator.nextInt(3); 

      color = colors[randomNumber]; 
      int colorAsInt = Color.parseColor(color); 
      return colorAsInt; 
     } 
} 

而且在活动类:

View.OnClickListener listener = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       int color = mColors.getcolor(); 
       relativeLayout.setBackgroundColor(color); 
     } 
}; 

它完美的作品:
但是,当我尝试使用返回类型的getcolor字符串和在活动类中使用parse int时,当我运行该应用程序它给了我一个错误:不幸的是应用程序已停止。

颜色类:

public String getcolor() { 
    Random randomGenerator = new Random(); 
    String color = ""; 

    int randomNumber = randomGenerator.nextInt(3); 

    color = colors[randomNumber]; 
    return color; 
} 

以及活动类:

View.OnClickListener listener = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       String color = mColors.getcolor(); 
       relativeLayout.setBackgroundColor(Integer.parseInt(color)); 
     } 
}; 

为什么这个问题会发生什么?

+0

你需要看的logcat,以确定飞机失事的原因。 – 2014-08-31 08:39:46

+0

[可惜MyApp已停止。我怎样才能解决这个问题?](http://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this) – 2014-08-31 08:40:02

回答

2

Integer.parseInt(color)不能解析字符串,因为它不是一个整数字符串"#39add1"
您必须像使用第一个功能一样使用Color.parseColor(color)

relativeLayout.setBackgroundColor(Color.parseColor(color)); 
+0

什么是整数字符串? – habib 2014-08-31 09:35:53

+0

包含数字的字符串只有“123”和“12.34” – JafarKhQ 2014-08-31 09:57:31

0

你的颜色定义更改为

public int[] colors = { 
    0x39add1, // light blue 
    0x3079ab, // dark blue 
    0xc25975 // mauve 
}; 

,并使用

setBackgroundColor(colors[0]); 
+0

int color和string color之间有什么特别的区别吗? – habib 2014-08-31 09:34:32

+0

是的,这是工作。 – habib 2014-08-31 13:13:49