【问题标题】:How to pass multidimensional Arraylist to another activity using bundle如何使用 bundle 将多维 Arraylist 传递给另一个活动
【发布时间】:2019-07-24 00:39:22
【问题描述】:

我正在尝试将一个多维数组列表(例如:Arraylist>)从一个 java 活动传递到另一个。我查看了很多帖子并确定使用捆绑包是最好的方法(我也已经在其他地方使用捆绑包,所以我知道它们通常是如何工作的),但是我还没有看到二维数组列表的示例。

我尝试了以下方法,但在意识到 putStringArrayListExtra 不接受 2d 数组列表后并没有走多远:

private static ArrayList<ArrayList<String>> bigArrayList = new ArrayList<>();
static ArrayList<String> smallArrayList= new ArrayList<>();

Bundle b = new Bundle();
b.putStringArrayListExtra("2dArrayList", bigArrayList );
Intent i=new Intent(context, Class);
i.putExtras(b);

ArrayList<String> urls = getIntent().getStringArrayListExtra("2dArrayList");

只是寻找一些关于如何在活动之间传递二维数组列表的帮助或建议。

【问题讨论】:

标签: java android arraylist


【解决方案1】:

您可以为此使用 Gson 库,无需实现可序列化。

假设你的数组列表是:

ArrayList<ArrayList<String>> bigArrayList= new ArrayList<>();

之后,您可以将其添加到 Intent 中,如下所示:

Intent i = new Intent(Activity1.this, Activity2.class);
i.putExtra("data", new Gson().toJson(bigArrayList));

您可以稍后在 Activity2 中检索它,如下所示:

String extra = getIntent().getStringExtra("data");
ArrayList<ArrayList<String>> bigArrayList= new Gson().fromJson(extra, new TypeToken<ArrayList<ArrayList<String>>>(){}.getType());

它对我有用!希望对你有帮助!

【讨论】:

    【解决方案2】:

    我还没试过这个。但我希望这会有所帮助。 我已经尝试了代码,它正在工作。

    当前活动

    private static ArrayList<ArrayList<String>> bigArrayList = new ArrayList<>();
    Intent i=new Intent(context, Class);
    i.putExtra("bigArrayList", bigArrayList);
    

    下一个活动

    将序列化数据解析为ArrayList&lt;ArrayList&lt;String&gt;&gt;,将值传递给urls变量。

    ArrayList<ArrayList<String>> urls = (ArrayList<ArrayList<String>>) getIntent().getSerializableExtra("bigArrayList");
    

    【讨论】:

    • 我已经尝试过了,它给了我以下错误。 . .未经检查的演员表:'java.io.Serializable' 到 'java.util.ArrayList>'
    • 错误发生在运行时还是编译时?
    • 如果只是警告,请尝试运行您的代码。它应该可以工作。
    • 它在代码运行时工作,但只是想知道这个警告是我可以忽略的还是会影响以后的性能,现在应该解决。
    • 只要确保解析相同的数据类型/对象即可。因为我们解析的是相同的ArrayList&lt;ArrayList&lt;String&gt;&gt;,所以它肯定会起作用。
    【解决方案3】:

    ActivityA.java

            Intent intent = new Intent(this, TestActivity.class);
            ArrayList<ArrayList<String>> ddArray = new ArrayList<ArrayList<String>>();
            ArrayList<String> a = new ArrayList<String>();
            a.add("A");
            ArrayList<String> b = new ArrayList<String>();
            b.add("B");
            ddArray.add(a);
            ddArray.add(b);
            Bundle bundle = new Bundle();
            bundle.putSerializable("ARRAY",ddArray);
            intent.putExtras(bundle);
            startActivity(intent);
    

    TestActivity.java

     ArrayList<ArrayList<String>> array = (ArrayList<ArrayList<String>>) getIntent().getExtras().getSerializable("ARRAY");
    

    【讨论】:

    • 我已经尝试过了,它也给了我与 NJY404 的响应相同的错误: Unchecked cast: 'java.io.Serializable' to 'java.util.ArrayList>'
    • 阅读 this 链接,您将了解它为何显示警告以及如何防止它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多