0

我正在编写一个小代码来将一种货币转换为另一种货币。该应用程序通过 EditText 接受两个值(配置为接受十进制数字)- 1) 本国或外地货币(如果填写了一个,则另一个字段留空) 2) 汇率。

这是代码:

package kk.currency;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class CurrencyActivity extends Activity {
    /** Called when the activity is first created. */

    EditText inpval1;
    EditText inpval2;
    EditText rate;

    int v1 = 0;
    int v2 = 0;
    int r = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void btnclick(View view)  {
        try {
            inpval1 = (EditText)findViewById(R.id.away);
            v1 = Integer.parseInt(inpval1.getText().toString());

            inpval2 = (EditText)findViewById(R.id.home);
            v2 = Integer.parseInt(inpval2.getText().toString());

            rate = (EditText)findViewById(R.id.rate);
            r = Integer.parseInt(rate.getText().toString()); 
        }
        catch (Exception e) {
            Toast.makeText(this, "Empty field", Toast.LENGTH_SHORT).show();
        }
        finally {
            v1 = v2 * r;

            EditText destination = (EditText)findViewById(R.id.away);
            destination.setText(Integer.toString(v1));
        }
    }   
}

问题是,在单击与“btnclick”关联的按钮时,无论输入什么,该字段(以及应该显示答案的位置)都显示为 0。但是当再次单击时,会显示正确的答案。

如果我在应该留空的字段中输入任何值,则第一次显示正确的值。

可能是什么问题?!

在删除“finally”并将其内容放入“try”时,我什至在单击按钮时都没有得到任何响应。

此外,在应用程序执行期间,LogCat 是完全空的。

这是有人要求的应用程序布局。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dip"
    android:layout_marginLeft="5dip"
    android:text="@string/away"
    android:textStyle="bold"
    android:textSize="20dip"
    android:textColor="#4199ae" />

<EditText
    android:id="@+id/away"
    android:digits="0123456789."
    android:inputType="number"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:hint="@string/c1" />

<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dip"
    android:layout_marginLeft="5dip"
    android:text="@string/conv"
    android:textStyle="bold"
    android:textSize="20dip"
    android:textColor="#4199ae" />

<EditText
    android:id="@+id/rate"
    android:digits="0123456789."
    android:inputType="number"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:hint="@string/rate" />

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dip"
    android:layout_marginLeft="5dip"
    android:text="@string/home"
    android:textStyle="bold"
    android:textSize="20dip"
    android:textColor="#4199ae" />

<EditText
    android:id="@+id/home"
    android:digits="0123456789."
    android:inputType="number"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:hint="@string/c2" />

<Button
    android:id="@+id/but"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dip"
    android:text="@string/buttxt"
    android:onClick="btnclick" />

4

3 回答 3

1

我在 Reddit 上的回复:

您的问题是因为您没有处理用户可能拥有的各种可能的输入。第一时间,在这条线上

v1 = Integer.parseInt(inpval1.getText().toString());

的价值

inpval1.getText().toString()

返回“”,它不能转换为整数,因此会导致异常。您应该会看到“空字段”Toast 出现。所以在那之后,它进入了最后一步,但是因为 v2 和 r 仍然是 0,所以它把 0 放在 v1 中,并将 0 放在离开的 EditText 中。

下次运行时,它会从 Away EditText 中获取 0,并且可以正常工作。你知道怎么调试吗?如果您使用的是 Eclipse,请双击要暂停的行,在最左侧的灰色/蓝色栏中,这将放置一个小断点图标,程序将停在那里。

因此,如果您在开始时删除 EditText 值的获取,它应该可以工作。此外,您还想在这里实现一些其他建议,因为每次单击按钮时都会通过获取指向控件视图的指针来做一些多余的工作。

祝你好运!

于 2012-05-19T07:38:28.093 回答
0

尝试这种方式,但请记住更改代码以匹配您正在使用的按钮 ID。

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class CurrencyActivity extends Activity {
/** Called when the activity is first created. */

    EditText inpval1;
    EditText inpval2;
    EditText rate;
    EditText destination;
    Button mbutt;
    int v1 = 0;
    int v2 = 0;
    int r = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mbutt = (Buttn)findViewById(R.id.SubmitButton);
        inpval1 = (EditText)findViewById(R.id.away);
        inpval2 = (EditText)findViewById(R.id.home);
        rate = (EditText)findViewById(R.id.rate);
        EditText destination = (EditText)findViewById(R.id.away);

        mbutt.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                         v1 = Integer.parseInt(inpval1.getText().toString());
                         v2 = Integer.parseInt(inpval2.getText().toString());
                         r = Integer.parseInt(rate.getText().toString()); 
                         v1 = v2 * r;
                         destination.setText(Integer.toString(v1));
                }
            });
    }    
}
于 2012-05-18T11:27:49.033 回答
0

尝试不使用 try catch 块,但如果你仍然想坚持这一点,那么请将 finally 中的代码放入 try 块中,并删除 finally 块。

像这样 :

public void btnclick(View view)  {

    try {
                 inpval1 = (EditText)findViewById(R.id.away);
                 v1 = Integer.parseInt(inpval1.getText().toString());

                 inpval2 = (EditText)findViewById(R.id.home);
                 v2 = Integer.parseInt(inpval2.getText().toString());

                 rate = (EditText)findViewById(R.id.rate);
                 r = Integer.parseInt(rate.getText().toString()); 

                 v1 = v2 * r;

                  EditText destination = (EditText)findViewById(R.id.away);
                  destination.setText(Integer.toString(v1));
        }

    catch (Exception e) {
        Toast.makeText(this, "Empty field", Toast.LENGTH_SHORT).show();
    }
于 2012-05-18T11:45:11.477 回答