【问题标题】:Android Studio - Unfortunately "appName" has stoppedAndroid Studio - 不幸的是“appName”已停止
【发布时间】:2015-03-03 01:54:15
【问题描述】:

我正在尝试在 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();

            }

        }
    }
}

【问题讨论】:

  • 我们可以得到堆栈跟踪吗?编辑:您可能没有在编辑文本中输入有效的双精度。我建议您先过滤它。
  • @jvrodrigues 我是 android studio 新手,请问如何获取堆栈跟踪。此外,该应用程序正在运行,但是当该字段为空并且我按下按钮 - convert 时。它会崩溃而不是显示 toast 消息。

标签: android onclicklistener


【解决方案1】:

阅读您的 cmets 后,我明白发生了什么。不过,第一件事是获取堆栈跟踪,如果您使用的是 Android Studio,则必须按 Alt-6 来打开 logcat 并阅读应用程序中发生的情况。或者,您也可以单击下方栏上显示 Android 的按钮,然后选择显示 logcat 的选项卡,您将可以更轻松地进行调试。

关于您的错误 - 您遇到了空指针异常。当程序期望设置一个变量但没有设置时,就会出现空指针。发生这个特殊的空指针是因为当您单击按钮时 EditText 中没有值 - 它是空值 - 然后您将空值传递给方法 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 中的值是否实际上是一个数字,因为如果您尝试解析单词“hello world”,您会得到一个 NumberFormatException。

希望这会有所帮助。

【讨论】:

  • 太棒了!那么,您能否将其标记为答案,以帮助其他有相同问题的人。
猜你喜欢
  • 2015-08-17
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 2013-08-19
相关资源
最近更新 更多