自定义对象未通过intent PutExtra传递给其他Activity

时间:2016-05-16 22:16:05

标签: android android-intent

所以我正在制作一个实现一些自定义类的Android应用程序。我想为其他活动创建一个类Menu_Organizer的对象,但在我对该对象进行初始化并将其发送到下一个Activity之后,该对象为NULL。以下是课程:

菜单项类

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();
    }
}

第二项活动

static

2 个答案:

答案 0 :(得分:3)

好吧,我认为问题在于,当你在一个键值对中传递你的类对象时,你在Intent对象中执行它,但是当你解决你的意图时,你通过一个bundle对象来做。所以,在你的临时活动中,你应该解决这个意图:

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

试试这个,这应该有效。如果你想通过一个包来做,那么先创建一个bundle对象,然后在你的bundle中放入你想要的东西。将捆绑包添加到您的意图,然后在下一个活动中解析捆绑包。

只是提示,类名通常不包含_,对所有类使用CamelCase命名约定。

答案 1 :(得分:0)

我建议使用EventBus库进行此类操作。它非常易于使用,并且完全符合以下要求:从一个地方发送和接收自定义对象类(碎片,活动,服务,您希望发送和接收对象的任何内容)。

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