当我点击按钮 - 按钮中的两个意图时,应用程序崩溃 - 使用枚举

问题描述:

我需要帮助我的代码。让我试着解释这个问题: 在第一个活动中,我有两个字段,我将从Enum中设置值,为此我为每个字段创建了一个按钮,这个字段基本显示了另一个活动,调用该值并将其带到主要活动。仍然在第一个活动,我有一个按钮,启动另一个活动,并(同时)从枚举结束发送到另一个活动的所有值。重点是,一切正常,但最后一个按钮没有,当我点击它的应用程序崩溃。发生了什么,我该如何解决它?当我点击按钮 - 按钮中的两个意图时,应用程序崩溃 - 使用枚举

这里去的第一个活动的代码:

public class MenuInicial extends AppCompatActivity { 

public static final int CONSTANTE_BANZO = 1; 

Button escolherM; 
Button escolherB; 
Button next; 
TextView campoM; 
TextView campoB; 
Intent intent1; 
Intent intent2; 
Intent intentBundle; 
Intent intentNext; 
Bundle bundle; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_menu_inicial); 

    intent1 = new Intent(MenuInicial.this, Montante.class); 

    campoM = (TextView) findViewById(R.id.fieldM); 
    escolherM = (Button) findViewById(R.id.chooseM); 

    String perfilM = getIntent().getExtras().getString("nameM"); 

    campoM.setText(perfilM); 

    escolherM.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v){ 
      startActivity(intent1); 
     } 
    }); 

    intent2 = new Intent(MenuInicial.this, Banzo.class); 

    campoB = (TextView) findViewById(R.id.fieldB); 
    escolherB = (Button) findViewById(R.id.chooseB); 

    escolherB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v){ 
      startActivityForResult(intent2, CONSTANTE_BANZO); 
     } 
    }); 

    next = (Button) findViewById(R.id.prosseguir); 
    intentBundle = new Intent(MenuInicial.this, ConferenciaDosDados.class); 
    intentNext = new Intent(MenuInicial.this, Dados.class); 

    next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String perfilM = getIntent().getExtras().getString("nameM"); 
      Float baseMt = getIntent().getExtras().getFloat("baseM"); 
      Float alturaMt = getIntent().getExtras().getFloat("alturaM"); 
      String perfilB = getIntent().getExtras().getString("nameB"); 
      Float baseBz = getIntent().getExtras().getFloat("baseB"); 
      Float alturaBz = getIntent().getExtras().getFloat("alturaB"); 
      bundle.putString("nomeM",perfilM); 
      bundle.putFloat("baseM",baseMt); 
      bundle.putFloat("alturaM",alturaMt); 
      bundle.putString("nomeB",perfilB); 
      bundle.putFloat("baseB",baseBz); 
      bundle.putFloat("alturaB",alturaBz); 
      intentBundle.putExtras(bundle); 
      startActivity(intentBundle); 
      startActivity(intentNext); 

     } 
    }); 

} 

protected void onActivityResult(int codigo, int resultado, Intent intent){ 

    if(codigo == CONSTANTE_BANZO){ 
     Bundle bundleB = intent.getExtras(); 
     if(bundleB != null){ 
      String perfilB = bundleB.getString("nameB"); 
      campoB.setText(perfilB); 
     } 
    } 
} 

}

+3

发布错误 –

+1

的''stacktrace''你试图在next.setOnClickListener里面同时启动两个活动点击 –

+0

那我该怎么办? –

next = (Button) findViewById(R.id.prosseguir); 
    intentBundle = new Intent(MenuInicial.this, ConferenciaDosDados.class); 
    intentNext = new Intent(MenuInicial.this, Dados.class); 

    next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String perfilM = getIntent().getExtras().getString("nameM"); 
      Float baseMt = getIntent().getExtras().getFloat("baseM"); 
      Float alturaMt = getIntent().getExtras().getFloat("alturaM"); 
      String perfilB = getIntent().getExtras().getString("nameB"); 
      Float baseBz = getIntent().getExtras().getFloat("baseB"); 
      Float alturaBz = getIntent().getExtras().getFloat("alturaB"); 
      bundle.putString("nomeM",perfilM); 
      bundle.putFloat("baseM",baseMt); 
      bundle.putFloat("alturaM",alturaMt); 
      bundle.putString("nomeB",perfilB); 
      bundle.putFloat("baseB",baseBz); 
      bundle.putFloat("alturaB",alturaBz); 
      intentBundle.putExtras(bundle); 
      startActivity(intentBundle); 
      startActivity(intentNext); 

     } 
    }); 
你要什么活动去

?选一个。当你这样做的时候,你可以得到那些额外的东西,然后当你需要去其他活动时,你也可以把那些额外的东西放在那里。

更好的方法是创建一个模型(带setter和getters的构造函数)并将它们放在一个列表中。在这一点上,你可以遍历列表,并采取你所需要的。这一切都取决于你在做什么,因为列表将不会像意图额外的那样被实例化。或者,您可以使用与HashMap类似的SharedPref(它也类似于Intent Extras)。 SharedPref会将密钥和值存储在手机缓存中,然后可以在需要时从中提取。同样,请记住,如果用户清除应用程序中的缓存,则会删除这些共享的前缀。

最后,您还可以使用数据库,如Parse Server或Firebase。

+0

仍然无法使用我所做的更改: next =(Button)findViewById(R.id.prosseguir); intentNext = new Intent(MenuInicial.this,Dados.class); next.setOnClickListener(新View.OnClickListener(){ @Override 公共无效的onClick(视图v){ 浮法baseMt = getIntent()getExtras()getFloat( “baseM”);。。 bundle.putFloat( “baseM”,baseMt) intentNext.putExtras(bundle) } –

+0

我相信原因是因为那不是你如何处理临时演员。你将其他活动传递给你想要使用的其他活动。对于它看起来像,你从一项活动中获得额外收入,然后将它们传入下一个活动。这不是你怎么做的 – DroiDev

+0

谢谢,我已经通过使用额外的数据(而不是捆绑),它的工作;) –