2016-05-16 25 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庫這種事情。使用起來非常簡單,給你的準確性如下:從一個地方發送和接收自定義對象類到另一個地方(碎片,活動,服務,無論你希望如何發送和接收對象)。

我個人的原因,他們有太多的限制,不喜歡意圖。