【问题标题】:How to take user input via EditText and do stuff with it如何通过 EditText 获取用户输入并用它做事
【发布时间】:2012-02-08 04:48:11
【问题描述】:

我搜索了该网站,发现了类似的问题,我已经实施了这些解决方案,但无济于事。我正在尝试做的事情:我只是想获得一点 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 获取,我希望它作为文本。

我假设我把一些简单的事情搞砸了,但它让我无法理解。

这是它试图从中获取的 EditText 之一

<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

【问题讨论】:

  • 也许你应该通读谷歌给出的这个例子。 Form Stuff - EditText
  • 错在哪一行,更明显。
  • 使用调试器和日志猫你会找到解决办法的。
  • @aneal,我检查了该页面,但没有看到任何有助于解决这种情况的内容。
  • @Smith,第一条错误消息来自 LogCat。通过运行调试器,我在 LogCat 中收到“02-07 23:59:00.562: W/ResourceType(510): No package identifier when getting value for resource number 0x00000054”。为什么将文本值称为资源编号?

标签: java android android-edittext


【解决方案1】:

您的代码不正确, 您正在尝试将整数值转换为十六进制、二进制和八进制数,但是,

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 格式。

【讨论】:

  • 新错误:02-08 00:04:32.143: E/AndroidRuntime(409): Caused by: java.lang.NumberFormatException: Invalid int: "54" 54 is what I type in, of当然。
  • 然后试试 System.out.println() 并在 consol 处检查。
  • 它又返回给我这个错误:02-08 00:58:28.586: E/AndroidRuntime(396): Caused by: java.lang.NumberFormatException: Invalid int: "58"
  • 好吧,做一件事,上传你的xml代码,我会在我的电脑上创建一个项目并检查它,更正它并给你解决方案
  • 我已经做到了,实际上,你正在做相反的事情......看我更新的代码,这是你想要的输出。
【解决方案2】:

您将一个 int 传递给 setText,因此它认为您正试图告诉它资源的 id。你需要给它传递一个字符串(或者更准确地说是一个 CharSequence,但是一个字符串就可以了),所以像

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

【讨论】:

  • 您的解决方案与路西法相同,这意味着它可能是正确的,但不幸的是对我不起作用。它说我的输入是无效的 int。
  • 所以,你有不止一个问题,那就是第一个问题。
【解决方案3】:
hex.setText(Integer.parseInt(deci,16));

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

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

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

【讨论】:

  • Lucifer 和 superfell 也是这么建议的,但并没有解决我的问题。
【解决方案4】:

这里将使用Integer.parseInt(deci,16) 方法将十六进制转换为十进制。 将 dec 转换为 hexa 使用 toHexString(deci); 但这里的小数应该是 int。

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

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().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))));

}

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多