如何通过EditText获取用户输入并使用它做任务

时间:2012-02-08 04:48:11

标签: java android android-edittext

我搜索了网站,我发现了类似的问题,我已经实施了这些解决方案,但无济于事。我正在尝试做什么:我只想获得一些Android编程经验,所以我试图制作一个hex / dec / bin / oct计算器。

我有一个十进制,十六进制,二进制和八进制的EditText。每个旁边都有一个“转换自”按钮。因此,如果您单击按钮以从八进制转换,它将输出相应的转换为其他的EditText字段。

这是我试图用于Lucifer建议的from decimal函数的代码的改进版本,但仍然无法解决问题:

public void dec(View view) {
final EditText decimal = (EditText) findViewById(R.id.editDec);
final EditText hex = (EditText) findViewById(R.id.editHex);
final EditText bin = (EditText) findViewById(R.id.editBin);
final EditText oct = (EditText) findViewById(R.id.editOct);
String deci = decimal.getText().toString();
hex.setText(String.valueOf(Integer.parseInt(deci,16)));
bin.setText(String.valueOf(Integer.parseInt(deci,2)));
oct.setText(String.valueOf(Integer.parseInt(deci,8)));
}

我正在获得的当前错误

02-08 00:04:32.143: E/AndroidRuntime(409): Caused by: java.lang.NumberFormatException: Invalid int: "54"

“54”是我尝试在十进制EditText中输入的数字。

我认为它说它找不到具有文本输入id的资源,但我不是想把文本作为ID获取,我想把它作为文本。

我假设我搞砸了一些简单的东西,但它让我望而却步。

这是它试图从

中获取的EditTexts之一
<EditText
android:id="@+id/editHex"
android:layout_width="100dp" 
android:layout_height="wrap_content"
android:layout_weight="11.38"
android:textColor="#000000"
android:background="@android:drawable/editbox_background"
android:inputType="text" >
</EditText>

十进制,二进制和八进制输入使用inputType“number”

4 个答案:

答案 0 :(得分:3)

你的代码不正确, 您正在尝试将整数值转换为Hexa,Binary&amp;八进制数,但是,

Integer.parseInt(deci,16)  Integer.parseInt(deci,2)  Integer.parseInt(deci,8)

用于将deci变量转换为Hexa,Binary和Ocatal,这意味着您正在通过错误执行反向操作。

检查我的更新代码,它是您想要的输出。

public void dec(View view) 
{
    try
    {
        EditText decimal = (EditText) findViewById(R.id.editDec);
        EditText hex = (EditText) findViewById(R.id.editHex);
        EditText bin = (EditText) findViewById(R.id.editBin);
        EditText oct = (EditText) findViewById(R.id.editOct);
        int deci = Integer.parseInt(decimal.getText().toString().trim());

        System.out.println ( "Original " + deci );
        System.out.println ( "Hexa : " + Integer.toHexString(deci) );
        System.out.println ( "Deci :" + Integer.toBinaryString(deci));
        System.out.println ( "Oct : " + Integer.toOctalString(deci) );

        hex.setText(String.valueOf(Integer.toHexString(deci)));
        bin.setText(String.valueOf(Integer.toBinaryString(deci)));
        oct.setText(String.valueOf(Integer.toOctalString(deci)));
    }
    catch ( Exception e )
    {
        System.out.println ( "Exception : " + e.toString() );
    }
}

当您将Text设置为EditText时,请确保在其中传递String格式。

答案 1 :(得分:1)

您正在将一个int传递给setText,因此它认为您正试图告诉它资源的ID。你需要传递一个字符串(或者更正确的是CharSequence,但字符串会很好),所以像

hex.setText(String.valueOf(Integer.parseInt(deci,16)));

答案 2 :(得分:1)

hex.setText(Integer.parseInt(deci,16));

EditText.setText(int ResId),如果您只是传递一个整数值,它会接受它,在您的情况下 - &gt;它接受它作为资源ID,并且它不可用,这就是错误发生的原因。 http://developer.android.com/reference/android/widget/EditText.html

所以将值转换为字符串并显示它。

hex.setText(String.valueOf(Integer.parseInt(deci,16)));

答案 3 :(得分:0)

此处方法Integer.parseInt(deci,16)将用于将hexa转换为十进制。 要将dec转换为hexa,请使用toHexString(deci);,但此处decimal应为int。

请检查以下代码。它会正常工作。

public void dec(查看视图){

    final EditText decimal = (EditText) findViewById(R.id.editDec);
    final EditText hex = (EditText) findViewById(R.id.editHex);
    final EditText bin = (EditText) findViewById(R.id.editBin);
    final EditText oct = (EditText) findViewById(R.id.editOct);
    String deci = decimal.getText().toString().trim();
    hex
            .setText(String.valueOf(Integer.toHexString(Integer
                    .parseInt(deci))));
    bin.setText(String.valueOf(Integer.toBinaryString(Integer
            .parseInt(deci))));
    oct.setText(String.valueOf(Integer
            .toOctalString(Integer.parseInt(deci))));

}