2017-07-25 62 views
0

我是新手編程,所以我真的不知道如何解決這個問題或爲什麼發生。不能得到editText整數值正確

我正在製作一個應用程序,並且在Main2Activity中假設用戶在EditText中插入一個值,然後在用戶按下按鈕後,該值將變爲整數並用於數學運算。

事情是,當我嘗試出來,當我按MainActivity中的按鈕來帶我到Main2Activity,應用程序崩潰。

我將問題縮小到了我在Main2Activity按鈕中的編碼,但並不真正知道錯在哪裏。

這是Main2Activity代碼。你可以幫我嗎?謝謝。

package com.example.cabr.teste; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class Main2Activity extends AppCompatActivity { 

    public double valorhorasponta = 0; 
    public double valorhorascheias = 0; 
    public double valorhorasvazio = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 

     TextView textView9 = (TextView) findViewById(R.id.textView9); 
     TextView textView10 = (TextView) findViewById(R.id.textView10); 
     TextView textView12 = (TextView) findViewById(R.id.textView12); 
     TextView textView14 = (TextView) findViewById(R.id.textView14); 
     final TextView textView11 = (TextView) findViewById(R.id.textView11); 
     final TextView textView13 = (TextView) findViewById(R.id.textView13); 
     final TextView textView15 = (TextView) findViewById(R.id.textView15); 
     final TextView textView17 = (TextView) findViewById(R.id.textView17); 

     final EditText editText1 = (EditText) findViewById(R.id.editText1); 
     final EditText editText2 = (EditText) findViewById(R.id.editText2); 
     final EditText editText3 = (EditText) findViewById(R.id.editText3); 
     final EditText editText4 = (EditText) findViewById(R.id.editText4); 

     Button button = (Button) findViewById(R.id.button); 

     Intent i = getIntent(); 
     String valorpot1 = i.getStringExtra("valorpot1"); 
     String valorpot12 = i.getStringExtra("valorpot12"); 

     textView9.setText(valorpot1); 


     if (valorpot12.equals("Tarifas de médias utilizações")){ 
      valorhorasponta = 0.3128; 
      textView10.setText(String.valueOf(valorhorasponta)); 

      valorhorascheias = 0.1555; 
      textView12.setText(String.valueOf(valorhorascheias)); 

      valorhorasvazio = 0.0862; 
      textView14.setText(String.valueOf(valorhorasvazio)); 
     } 
     if (valorpot12.equals("Tarifas de longas utilizações")){ 
      valorhorasponta = 0.2318; 
      textView10.setText(String.valueOf(valorhorasponta)); 

      valorhorascheias = 0.1341; 
      textView12.setText(String.valueOf(valorhorascheias)); 

      valorhorasvazio = 0.08; 
      textView14.setText(String.valueOf(valorhorasvazio)); 
     } 

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

       String valorquantponta1 = editText1.getText().toString(); 
       int valorquantponta = Integer.parseInt(valorquantponta1); 

       String valorquantcheias1 = editText2.getText().toString(); 
       int valorquantcheias = Integer.parseInt(valorquantcheias1); 

       String valorquantvazio1 = editText3.getText().toString(); 
       int valorquantvazio = Integer.parseInt(valorquantvazio1); 

       String valorquantpot1 = editText4.getText().toString(); 
       int valorquantpot = Integer.parseInt(valorquantpot1); 

       double valortotponta = valorhorasponta * valorquantponta; 
       double valortotcheias = valorhorascheias * valorquantcheias; 
       double valortotvazio = valorquantvazio * valorhorasvazio; 

       textView11.setText(String.valueOf(valortotponta)); 
       textView13.setText(String.valueOf(valortotcheias)); 
       textView15.setText(String.valueOf(valortotvazio)); 
      } 
     }); 

    } 
} 
+1

對於這個「應用程序崩潰」,我們不能做太多事情。粘貼你得到的日誌請=)。 –

+0

請張貼日誌。我的猜測是你需要將int乘以它的倍數。 –

回答

0

可以以這種方式

的EditText EDITTEXT =(的EditText)findViewById(R.id.editText)取值從EditText上;

String string = editText.getText()。toString;

int int_value_from_editText = Integer.parseInt(string);

0

你可以得到NullPointerException因爲valorpot1valorpot12可能是null如果意圖沒有額外valorpot1valorpot12。將空對象與某個字符串值進行比較將引發異常。爲了避免它:

取代:

String valorpot1 = i.getStringExtra("valorpot1"); 
String valorpot12 = i.getStringExtra("valorpot12"); 

有:

String valorpot1 = i.hasExtra("valorpot1") ? i.getStringExtra("valorpot1") : ""; 
String valorpot12 = i.hasExtra("valorpot12") ? i.getStringExtra("valorpot12") : ""; 

另一種可能的應用程序崩潰可能是由於從字符串轉換到整數不當。您的EditText可以包含字母或不能轉換爲整數的double值。因此您需要在使用前檢查它。

使用convertToInt下面提供的方法將String轉換爲Integer。在代碼中將Integer.parseInt替換爲convertToInt

private int convertToInt(String value) 
{ 
    if (value.matches("^-?\\d+$")) 
    { 
     return Integer.parseInt(value); 
    } 
    else 
    { 
     return 0; 
    } 
} 

您可以有其他異常,可能導致應用程序崩潰。如果您向我們提供Logcat報告,這將會非常有幫助。