string数组如何声明全局并使用不同的值初始化

时间:2013-12-19 22:04:57

标签: java android arrays string

在我的代码中我需要使用switch语句初始化数组但是当我尝试它时显​​示错误就像......“数组常量只能在初始化器中使用”...如何解决这个问题..

public class Arrayclass {
String[] mStrings;
void setfor()
{
    int i = 0;
    switch(i)
    {
    case 0:  mStrings = {
            "https://dl.dropboxusercontent.com/s/f308a9s5ycuc3mh/1.jpg",
            "https://dl.dropboxusercontent.com/s/cmc7qe74ckr5z2u/24.jpg",
            "https://dl.dropboxusercontent.com/s/4h353n2virybjql/25.jpg",
            "https://dl.dropboxusercontent.com/s/t9gta0rpaze7j4f/26.jpg",
            "https://dl.dropboxusercontent.com/s/b9sv9nki52e7zvg/27.jpg",
            "https://dl.dropboxusercontent.com/s/gyg7kvnlnv753lf/37.jpg" };
        break;
    case 1:  mStrings = {
            "https://dl.dropboxusercontent.com/s/f308a9s5ycuc3mh/1.jpg",
            "https://dl.dropboxusercontent.com/s/cmc7qe74ckr5z2u/24.jpg",
            "https://dl.dropboxusercontent.com/s/4h353n2virybjql/25.jpg",
            "https://dl.dropboxusercontent.com/s/t9gta0rpaze7j4f/26.jpg",
            "https://dl.dropboxusercontent.com/s/b9sv9nki52e7zvg/27.jpg",
            "https://dl.dropboxusercontent.com/s/gyg7kvnlnv753lf/37.jpg" };
        break;
    }
}

3 个答案:

答案 0 :(得分:3)

远离声明,您必须在阵列初始值设定项上使用new String[]

case 0:  mStrings = new String[] {
        "https://dl.dropboxusercontent.com/s/f308a9s5ycuc3mh/1.jpg",
        "https://dl.dropboxusercontent.com/s/cmc7qe74ckr5z2u/24.jpg",
        "https://dl.dropboxusercontent.com/s/4h353n2virybjql/25.jpg",
        "https://dl.dropboxusercontent.com/s/t9gta0rpaze7j4f/26.jpg",
        "https://dl.dropboxusercontent.com/s/b9sv9nki52e7zvg/27.jpg",
        "https://dl.dropboxusercontent.com/s/gyg7kvnlnv753lf/37.jpg" };

根据JLS, Section 10.6

  

可以在声明(第8.3节,第9.3节,第14.4节)中指定数组初始值设定项,或者作为数组创建表达式(第15.10节)的一部分,以创建数组并提供一些初始值。

“数组创建表达式”是指JLS, Section 15.10,它使您使用new Type[]添加数组初始值设定项。

  

ArrayCreationExpression:
  新的PrimitiveType DimExprs Dimsopt
  new ClassOrInterfaceType DimExprs Dimsopt
  新的PrimitiveType Dims ArrayInitializer
  new ClassOrInterfaceType Dims ArrayInitializer

答案 1 :(得分:1)

您使用的语法仅在声明数组变量时使用才有效。

尝试:

case 0:  mStrings = new String[] {
...

答案 2 :(得分:1)

这是何时使用android提供的String资源的完美示例。

http://developer.android.com/guide/topics/resources/string-resource.html

我会打开你的strings.xml文件,并将每个选项定义为字符串数组:

<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>

然后全局声明你的字符串[]:

String[] vals;

然后在你的开关中执行以下操作:

Resources res = getResources();
vals = res.getStringArray(R.array.planets_array);