我试图在Android Studio中构建一个2货币转换器应用程序(GNConverter)。我已经使用onClickLister()创建了一个按钮来转换值或显示Toast消息。我收到消息"不幸的是GNConverter已经停止"当我在手机上跑时。
XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:paddingTop="30dp"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/PromptTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Nigeria Naira (NGN)."
android:textSize="20sp"
android:layout_marginBottom="20dp"/>
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:layout_marginBottom="20dp"
android:hint="0"
android:textSize="50sp"/>
<TextView
android:id="@+id/PromptTextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ghanaian New Cedi (GHS)."
android:textSize="20sp"
android:layout_marginBottom="20dp"/>
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/PromptTextView"
android:inputType="numberDecimal"
android:layout_marginBottom="20dp"
android:hint="0"
android:textSize="50sp"/>
<Button
android:id="@+id/btnConvert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="100dp"
android:text="Convert"/>
</LinearLayout>
我的活动类:
public class GNConverter extends ActionBarActivity implements View.OnClickListener{
private EditText text1;
private EditText text2;
private Button btnConvert;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gnconverter);
text1 = (EditText) findViewById(R.id.editText1);
text2 = (EditText) findViewById(R.id.editText2);
btnConvert = (Button) findViewById(R.id.btnConvert);
btnConvert.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId()==R.id.btnConvert){
double a = Double.parseDouble(text1.getText().toString());
if (a>0){
double b = a * 0.016694;
text2.setText(String.valueOf(b));
}
else if (a<=0) {
Toast.makeText(GNConverter.this, "Enter a Value!", Toast.LENGTH_LONG).show();
}
}
}
}
答案 0 :(得分:0)
在阅读你的评论后,我明白了发生了什么。但首先,要获得堆栈跟踪,如果您使用Android Studio,则必须按 Alt-6 打开logcat并阅读应用程序中正在发生的事情。或者,您也可以单击下方栏中显示Android的按钮,然后选择显示logcat的选项卡,您将更容易调试。
关于您的错误 - 您有一个空指针异常。当程序期望设置变量时,会发生空指针,但不是。发生这个特殊的空指针是因为当你单击按钮时EditText中没有值 - 它为null - 然后你将null值传递给方法Double.parseDouble(),它需要一个Double。
为避免这种情况,您需要在尝试解析之前检查编辑文本中是否存在某些内容:
@Override
public void onClick(View v) {
if (v.getId()==R.id.btnConvert){
if (text1.getText().toString() != null){
try{
double a = Double.parseDouble(text1.getText().toString());
double b = a * 0.016694;
text2.setText(String.valueOf(b));
}catch(NumberFormatException nfe){
Toast.makeText(GNConverter.this, "Enter a valid Value!", Toast.LENGTH_LONG).show();
}
}else if (a<=0) {
Toast.makeText(GNConverter.this, "Enter a Value!", Toast.LENGTH_LONG).show();
}
}
}
我还添加了一个try / catch,以丑陋和原始的方式检查EditText中的值是否实际上是一个数字,因为如果你试图解析单词&#34; hello world&#34;你会得到一个NumberFormatException。
希望这有帮助。