2016-05-16 80 views
0

所以我提出一个实现了自定义类的Android应用程序传递给其他活动。我想创建一个Menu_Organizer类的对象到其他活动,但是在初始化对象并将它发送到下一个Activity之后,该对象为NULL。下面是类:自定义对象未通过的意图PutExtra

菜单项类

import java.io.Serializable; 

public class Menu_Items implements Serializable { 

    private String Name = ""; 
    private String Description = ""; 
    private float Price = 0.0f; 
    private String Category = ""; 

    /* Getters and Setters*/  
} 

菜单管理类:

public class Menu_Organizer implements Serializable { 

    ArrayList<String> Categories; 
    ArrayList<Menu_Items> Food; 

// EDITED 
public Menu_Organizer() { 
    Categories = new ArrayList<String>(); 
    Food = new ArrayList<Menu_Items>(); 
} 

    /* Other class methods */ 
} 

第一个活动(主)

public class MainActivity extends AppCompatActivity { 
    private Button btn; 
    public Menu_Organizer menu; 

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

    public void onclick() { 
     btn = (Button) findViewById(R.id. btn); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Menu_Organizer menu = new Menu_Organizer(); 
       menu.New_Menu_Item("Carne", "Pollo", "Pollo Asado Rico!", 4.55f); 

       Intent activity2= new Intent(MainActivity.this,temp.class); 
       activity2.putExtra("Menu", menu); 
       startActivity(activity2); 
      } 
     }); 
    } 
} 

次活动

public class temp extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_Second); 
     Bundle bundle = getIntent().getExtras(); 

     Menu_Organizer menu = (Menu_Organizer) bundle.getSerializable("Menu"); 
     String str= menu.Food.get(0).getName(); 
    } 
} 
+2

的'Intent'在'MainActivity'被打开''temp' Activity',但对方'你已经发布Activity'类是'秒'。 –

+0

你应该显示你的New_Menu_Item实现。我的猜测是,在添加项目之前,您并未创建Food的新ArrayList实例。 –

+0

http://stackoverflow.com/questions/4233873/how-do-i-get-extra-data-from-intent-on-android试过这个而不是'Bundle bundle = getIntent()。getExtras();'? – iCantSeeSharp

回答

3

好吧,我认为问题是,当你通过类对象的键值对,你在一个Intent对象做到这一点,但是当你解决你的意图,你通过捆绑对象做到这一点。所以,在你临时的活动,你应该可以解决类似的意图:

Intent intent = this.getIntent(); 
Menu_Organizer menu = (Menu_Organizer) intent.getSerializableExtra("Menu"); 

试试这个,这应该工作。如果你想通过一个包来实现,那么首先创建一个包对象,然后把你想要的任何东西放入该包中。将该捆绑添加到您的意图中,然后在下一个活动中解析该捆绑。

只是一个提示,类名一般不包含在_其中,使用驼峰命名约定的所有类。

0

我会建议使用EventBus库这种事情。使用起来非常简单,给你的准确性如下:从一个地方发送和接收自定义对象类到另一个地方(碎片,活动,服务,无论你希望如何发送和接收对象)。

我个人的原因,他们有太多的限制,不喜欢意图。