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

时间:2017-08-24 19:39:05

标签: android android-intent

我的代码需要帮助。让我试着解释一下这个问题: 在第一个活动中,我有两个字段,我将从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);
        }
    }
}

}

1 个答案:

答案 0 :(得分: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和getter的构造函数)并将它们放在一个列表中。此时,您可以遍历列表并获取所需内容。这一切都取决于你在做什么,因为列表不会像意图额外的那样被实例化。

或者,您可以使用类似于HashMap的SharedPref(也类似于Intent Extras)。 SharedPref会将密钥和值存储在手机缓存中,然后您可以在需要时从中拉出。同样,请记住,如果用户清除应用程序上的缓存,则会删除这些共享的首选项。

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