2017-08-24 42 views
0

我需要幫助我的代碼。讓我試着解釋這個問題: 在第一個活動中,我有兩個字段,我將從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

那我該怎麼辦? –

回答

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

謝謝,我已經通過使用額外的數據(而不是捆綁),它的工作;) –

相關問題