2016-05-16 1 views
0

Also mache ich eine Android-App, die einige benutzerdefinierte Klassen implementiert. Ich möchte ein Objekt der Klasse Menu_Organizer für andere Aktivitäten erstellen, aber nachdem ich das Objekt initialisiert und es an die nächste Aktivität gesendet habe, ist das Objekt NULL. Hier sind die Klassen:Benutzerdefinierte Objekte werden nicht an andere Aktivitäten übergeben. PutExtra

Menüpunkte Klasse

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*/  
} 

Menu Organizer Klasse:

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 */ 
} 

Erste Aktivität (Haupt)

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

Zweite Aktivität

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

Der 'Intent' in' MainActivity' öffnet die 'temp'' Activity', aber die andere 'Activity' Klasse ist' Second'. –

+0

Sie sollten Ihre Implementierung von New_Menu_Item anzeigen. Meine Vermutung ist, dass Sie keine neue ArrayList-Instanz von Food erstellen, bevor Sie die Elemente hinzufügen. –

+0

http://stackoverflow.com/questions/4233873/how-do-i-get-extra-data-from-intent-on-android versuchte dies anstelle von 'Bundle bundle = getIntent(). GetExtras();'? – iCantSeeSharp

Antwort

3

In Ordnung, ich denke, dass das Problem ist, dass, wenn Sie Ihr Klassenobjekt in einem Schlüssel-Wert-Paar übergeben, tun Sie es in einem Intent-Objekt, aber wenn Sie Ihre Absicht lösen, tun Sie das über ein Bundle-Objekt. Also, in Ihrer Temp-Aktivität sollten Sie die Absicht wie folgt lösen:

Versuchen Sie dies, das sollte funktionieren. Wenn Sie dies über ein Bündel tun möchten, erstellen Sie zuerst ein Bundle-Objekt und fügen Sie dann das gewünschte Bündel ein. Fügen Sie das Bündel Ihrer Absicht hinzu und lösen Sie das Paket dann in Ihrer nächsten Aktivität auf.

Nur ein Tipp, Klassennamen enthalten in der Regel nicht _ in ihnen CamelCase Namenskonvention für alle Klassen verwenden.

0

Ich würde empfehlen, EventBus Bibliothek für diese Art von Sache zu verwenden. Es ist ziemlich einfach zu verwenden und gibt Ihnen genau das: Senden und Empfangen von benutzerdefinierten Objektklassen von einem Ort zu einem anderen (Fragmente, Aktivitäten, Dienste, was auch immer Sie senden und empfangen können Objekte).

Ich persönlich mag Intents nicht, weil sie zu viele Einschränkungen haben.