putStringArray()使用String 2-Dimensional array(String [] [])

时间:2010-10-21 05:04:50

标签: android arrays bundle

我想将二维字符串数组传递给另一个活动。 我的S2-D字符串数组(String [] [])是'selected_list'。

代码是:

     Bundle list_bundle=new Bundle();
     list_bundle.putStringArray("lists",selected_list); 
     Intent list_Intent = new Intent(v.getContext(), view_selected_items.class);
     startActivityForResult(list_Intent, 2);

但是putStringArray(“lists”,selected_list)显示的错误就像我们只能传递1维数组(String [])。

由于

3 个答案:

答案 0 :(得分:3)

您可以使用putSerializable。数组是可序列化的,只要它们的元素是。

存储:

list_bundle.putSerializable("lists", selected_list);

访问:

String[][] selected_list = (String[][]) bundle.getSerializable("lists");

答案 1 :(得分:1)

这对我来说效果很好:感谢Matthew和Mehdiway

开始新活动(发送String [] []和String):

String[][] arrayToSend=new String[3][30];
String stringToSend="Hello";
Intent i = new Intent(this, NewActivity.class);

i.putExtra("key_string",stringToSend);

Bundle mBundle = new Bundle();
mBundle.putSerializable("key_array_array",  arrayToSend);
i.putExtras(mBundle);

startActivity(i);

要在NewActivity.onCreate中访问:

String sReceived=getIntent().getExtras().getString("key_string");

String[][] arrayReceived=null;
Object[] objectArray = (Object[]) getIntent().getExtras().getSerializable("key_array_array");
if(objectArray!=null){
    arrayReceived = new String[objectArray.length][];
    for(int i=0;i<objectArray.length;i++){
        arrayReceived[i]=(String[]) objectArray[i];
    }
}

答案 2 :(得分:0)

正如Matthew所说,你可以把字符串数组放在这个

Bundle list_bundle=new Bundle();
list_bundle.putStringArray("lists",selected_list);

这非常有效,但是当您尝试通过(String[][]) bundle.getSerializable("lists");获取数组时,它会提供

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.String

所以你需要做的是:

    Object[] objectArray = (Object[]) getIntent().getExtras().getSerializable("lists");
    int horizontalLength = 0;
    if (objectArray.length > 0)
        horizontalLength = ((Object[]) objectArray[0]).length; // See explanation to understand the cast
    String[][] my_list = new String[objectArray.length][horizontalLength];
    int i = 0;
    for(Object row : objectArray)
    {
        my_list[i][0] = ((String[])row)[0];
        my_list[i++][1] = ((String[])row)[1];
    }

说明:

当您将数组作为I Serializable对象获取时,它的行为与简单的String数组的行为不同,而是将每行视为单独的数组,因此您需要做的是将Serializable对象作为一维数组读取,然后将其每一行转换为String []数组。瞧瞧!