我是编程新手,所以我真的不知道如何解决这个问题或者为什么会这样做。
我正在创建一个应用程序,而在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));
}
});
}
}
答案 0 :(得分:0)
您可以通过这种方式从EditText获取值
EditText editText =(EditText)findViewById(R.id.editText);
String string = editText.getText()。toString;
int int_value_from_editText = Integer.parseInt(string);
答案 1 :(得分:0)
如果意图没有额外内容NullPointerException
和valorpot1
,您可以获得valorpot12
,因为null
和valorpot1
可能是valorpot12
。将null对象与某个字符串值进行比较将引发异常。为了避免它:
取代:
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") : "";
另一个可能的应用程序崩溃可能是由于从String到Integer的不正确转换。您的EditText可以包含不能转换为整数的字母或双精度值。因此,您需要在使用前进行检查。
使用下面提供的convertToInt
方法将String
转换为Integer
。在代码中将Integer.parseInt
替换为convertToInt
。
private int convertToInt(String value)
{
if (value.matches("^-?\\d+$"))
{
return Integer.parseInt(value);
}
else
{
return 0;
}
}
您可以有其他可能导致应用程序崩溃的异常。如果您向我们提供Logcat报告,将会非常有用。