当我点击按钮 - 按钮中的两个意图时,应用程序崩溃 - 使用枚举
我需要帮助我的代码。让我试着解释这个问题: 在第一个活动中,我有两个字段,我将从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);
}
}
}
}
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。
仍然无法使用我所做的更改: 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) } –
我相信原因是因为那不是你如何处理临时演员。你将其他活动传递给你想要使用的其他活动。对于它看起来像,你从一项活动中获得额外收入,然后将它们传入下一个活动。这不是你怎么做的 – DroiDev
谢谢,我已经通过使用额外的数据(而不是捆绑),它的工作;) –
发布错误 –
的''stacktrace''你试图在next.setOnClickListener里面同时启动两个活动点击 –
那我该怎么办? –