Android 如何使用Intent将对象数组从一个活动传递到另一个活动? 我正在制作一个应用程序,其中数据库产品将添加到xml文件中。 查询xml文件后,这些产品将添加到数组中 此数组将被发送到其他活动,例如菜单的MainActivity,但是我无法通过Intent发送数组 //main活动 公共类MainActivity扩展了AppCompatActivity{ 公共数组列表数组; 私有文件产品; 私有文件输出流文件; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 数组=新的ArrayList(); //如果没有xml文件,则会转到数据库并将产品添加到xml文件中 if((Produtos.exists()==false)) adicionarprodutsxml(); //查询xml文件并在数组中添加产品 ConsultarFicheirosXml(); //将数组从一个活动传递到另一个活动 意图i=新意图(MainActivity.this、Menu.class); i、 putExtra(“数组”,数组); 星触觉(i); } public void ConsultarFicheirosXml() { int tipo=0; 字符串nome=“”; 浮动pvp=0; 整数量化; int-eventType=0; XmlPullParser=null; File=null; FileInputStream fis=null; XmlPullParserFactory工厂; 试一试{ factory=XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); parser=factory.newPullParser(); file=新文件(“/mnt/sdcard/Produtos.xml”); 试一试{ fis=新文件输入流(文件); }catch(filenotfounde异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } setInput(新的InputStreamReader(fis)); eventType=parser.getEventType(); }catch(XMLPullParseRexE){ //TODO自动生成的捕捉块 e、 printStackTrace(); } while(eventType!=XmlPullParser.END_文档){ 开关(事件类型){ 案例XmlPullParser.START_文档: 打破 case XmlPullParser.START_标记: if(parser.getName().equalsIgnoreCase(“Tipo”)){ Produto p=新的Produto(); 试一试{ tipo=Integer.valueOf(parser.nextText()); parser.nextTag(); nome=parser.nextText(); parser.nextTag(); pvp=Float.valueOf(parser.nextText()); parser.nextTag(); quantidade=Integer.valueOf(parser.nextText()); parser.nextTag(); p、 tipo=tipo; p、 nome=nome; p、 pvp=pvp; p、 quantidade=quantidade; 数组。添加(p); }catch(XMLPullParseRexE){ //TODO自动生成的捕捉块 e、 printStackTrace(); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } 打破 case XmlPullParser.END_标记: 打破 案例XmlPullParser.END_文档: 打破 } 试一试{ eventType=parser.next(); }catch(XMLPullParseRexE){ //TODO自动生成的捕捉块 e、 printStackTrace(); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } } //另一项活动 公共类菜单扩展了AppCompatActivity{ 公共ArrayList ArrayList; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_菜单); Bundle produtos=getIntent().getExtras(); }

Android 如何使用Intent将对象数组从一个活动传递到另一个活动? 我正在制作一个应用程序,其中数据库产品将添加到xml文件中。 查询xml文件后,这些产品将添加到数组中 此数组将被发送到其他活动,例如菜单的MainActivity,但是我无法通过Intent发送数组 //main活动 公共类MainActivity扩展了AppCompatActivity{ 公共数组列表数组; 私有文件产品; 私有文件输出流文件; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 数组=新的ArrayList(); //如果没有xml文件,则会转到数据库并将产品添加到xml文件中 if((Produtos.exists()==false)) adicionarprodutsxml(); //查询xml文件并在数组中添加产品 ConsultarFicheirosXml(); //将数组从一个活动传递到另一个活动 意图i=新意图(MainActivity.this、Menu.class); i、 putExtra(“数组”,数组); 星触觉(i); } public void ConsultarFicheirosXml() { int tipo=0; 字符串nome=“”; 浮动pvp=0; 整数量化; int-eventType=0; XmlPullParser=null; File=null; FileInputStream fis=null; XmlPullParserFactory工厂; 试一试{ factory=XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); parser=factory.newPullParser(); file=新文件(“/mnt/sdcard/Produtos.xml”); 试一试{ fis=新文件输入流(文件); }catch(filenotfounde异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } setInput(新的InputStreamReader(fis)); eventType=parser.getEventType(); }catch(XMLPullParseRexE){ //TODO自动生成的捕捉块 e、 printStackTrace(); } while(eventType!=XmlPullParser.END_文档){ 开关(事件类型){ 案例XmlPullParser.START_文档: 打破 case XmlPullParser.START_标记: if(parser.getName().equalsIgnoreCase(“Tipo”)){ Produto p=新的Produto(); 试一试{ tipo=Integer.valueOf(parser.nextText()); parser.nextTag(); nome=parser.nextText(); parser.nextTag(); pvp=Float.valueOf(parser.nextText()); parser.nextTag(); quantidade=Integer.valueOf(parser.nextText()); parser.nextTag(); p、 tipo=tipo; p、 nome=nome; p、 pvp=pvp; p、 quantidade=quantidade; 数组。添加(p); }catch(XMLPullParseRexE){ //TODO自动生成的捕捉块 e、 printStackTrace(); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } 打破 case XmlPullParser.END_标记: 打破 案例XmlPullParser.END_文档: 打破 } 试一试{ eventType=parser.next(); }catch(XMLPullParseRexE){ //TODO自动生成的捕捉块 e、 printStackTrace(); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } } //另一项活动 公共类菜单扩展了AppCompatActivity{ 公共ArrayList ArrayList; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_菜单); Bundle produtos=getIntent().getExtras(); },android,android-intent,arraylist,android-activity,Android,Android Intent,Arraylist,Android Activity,将对象设置为可并行(android中推荐)或可系列化模型类。然后您可以在活动之间传递对象。使用意图不是一个好主意。请使用事件总线 参考您将Produto类设置为Parcelable,然后将此Parcelable数组传递给intent。参考此答案更新了问题的语法 //MainActivity public class MainActivity extends AppCompatActivity { public ArrayList<Produto&g

将对象设置为可并行(android中推荐)或可系列化模型类。然后您可以在活动之间传递对象。

使用意图不是一个好主意。请使用事件总线

参考您将
Produto
类设置为
Parcelable
,然后将此Parcelable数组传递给intent。参考此答案更新了问题的语法
    //MainActivity
        public class MainActivity extends AppCompatActivity {
         public ArrayList<Produto> array;
            private File Produtos;
            private FileOutputStream fileos;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                array = new ArrayList<Produto>();

        //if there is no xml file this goes to the database and adds the products in an xml file
                if ((Produtos.exists() == false))
                AdicionarProdutosXML();

        //query xml file and add the products in an array
                ConsultarFicheirosXml();

//pass the array from one activity to another
                Intent i=new Intent(MainActivity.this,Menu.class);
                i.putExtra("array",array);
                startActivity(i);
            }

            public void ConsultarFicheirosXml()
            {
                    int tipo=0;
                    String nome="";
                    float pvp=0;
                    int quantidade;
                    int eventType=0;
                    XmlPullParser parser=null;
                    File file=null;
                    FileInputStream fis=null;
                    XmlPullParserFactory factory;

                    try {
                        factory = XmlPullParserFactory.newInstance();
                        factory.setNamespaceAware(true);
                        parser = factory.newPullParser();
                        file = new File("/mnt/sdcard/Produtos.xml");

                        try {
                            fis = new FileInputStream(file);
                        } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        parser.setInput(new InputStreamReader(fis));
                        eventType=parser.getEventType();

                    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    while(eventType!=XmlPullParser.END_DOCUMENT) {

                        switch (eventType) {
                            case XmlPullParser.START_DOCUMENT:

                                break;
                            case XmlPullParser.START_TAG:

                                if (parser.getName().equalsIgnoreCase("Tipo")) {
                                    Produto p = new Produto();
                                    try {
                                       tipo= Integer.valueOf(parser.nextText());
                                       parser.nextTag();
                                       nome=parser.nextText();
                                       parser.nextTag();
                                       pvp=Float.valueOf(parser.nextText());
                                       parser.nextTag();
                                       quantidade=Integer.valueOf(parser.nextText());
                                       parser.nextTag();

                                       p.tipo=tipo;
                                       p.nome=nome;
                                       p.pvp=pvp;
                                       p.quantidade=quantidade;
                                       array.add(p);


                                    } catch (XmlPullParserException e) {
                                // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                    // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }


                                }
                                break;
                            case XmlPullParser.END_TAG:

                                break;

                            case XmlPullParser.END_DOCUMENT:

                                break;
                        }
                        try {
                            eventType = parser.next();
                        } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
        // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
            }

        //another activity

        public class Menu extends AppCompatActivity {

            public ArrayList<Produto> arrayList;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_menu);

             Bundle produtos=getIntent().getExtras();

            }