我搜索了网站,我发现了类似的问题,我已经实施了这些解决方案,但无济于事。我正在尝试做什么:我只想获得一些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”
答案 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))));
}