2016-05-16 5 views
0

私はいくつかのカスタムクラスを実装するアンドロイドアプリケーションを作っています。私は他のアクティビティに対してMenu_Organizerクラスのオブジェクトを作成したいが、オブジェクトを初期化して、それを次のアクティビティに送ると、オブジェクトは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 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 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 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

'MainActivity'の' Intent'は 'temp'' Activity'を開いていますが、あなたが投稿した 'Activity'クラスは' Second'です。 –

+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

私は、あなたのクラスオブジェクトをキー値のペアで渡すと、インテントオブジェクトでそれを行うのが問題だと思いますが、あなたの意図を解決するときは、バンドルオブジェクトを使って行います。したがって、あなたのtempアクティビティでは、次のような意図を解決する必要があります。

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

これを試してください。バンドルを介してやりたい場合は、最初にバンドルオブジェクトを作成し、そのバンドルに必要なものを入れます。バンドルを目的に追加して、次のアクティビティでバンドルを解決します。

ちょうどヒントですが、クラス名には一般に_が含まれていないため、すべてのクラスでCamelCase命名規則を使用します。

0

この種のライブラリにはEventBusライブラリを使用することをおすすめします。使い方は非常に簡単で、カスタムオブジェクトクラスをある場所から別の場所に(オブジェクトを送受信できるようにするために、フラグメント、アクティビティ、サービスなど)送受信します。

私は個人的に意図があまりにも多くの制限を持っているのが好きではありません。

関連する問題