我会从用户处获取两个号码,但EditText
中的这个号码必须转换为int
。我认为它应该可行,但我仍然遇到Android Studio中的编译代码问题。
CatLog 显示错误符合:
int wiek = Integer.parseInt(wiekEditText.getText().toString());
以下是我的完整Android代码:
public class MyActivity extends ActionBarActivity {
int Wynik;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
int Tmax, RT;
EditText wiekEditText = (EditText) findViewById(R.id.inWiek);
EditText tspoczEditText = (EditText) findViewById(R.id.inTspocz);
int wiek = Integer.parseInt(wiekEditText.getText().toString());
int tspocz = Integer.parseInt(tspoczEditText.getText().toString());
Tmax = 220 - wiek;
RT = Tmax - tspocz;
Wynik = 70*RT/100 + tspocz;
final EditText tempWiekEdit = wiekEditText;
TabHost tabHost = (TabHost) findViewById(R.id.tabHost); //Do TabHost'a z layoutu
tabHost.setup();
TabHost.TabSpec tabSpec = tabHost.newTabSpec("Calc");
tabSpec.setContent(R.id.Calc);
tabSpec.setIndicator("Calc");
tabHost.addTab(tabSpec);
tabSpec = tabHost.newTabSpec("Hints");
tabSpec.setContent(R.id.Hints);
tabSpec.setIndicator("Hints");
tabHost.addTab(tabSpec);
final Button Btn = (Button) findViewById(R.id.Btn);
Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"blablabla"+ "Wynik",Toast.LENGTH_SHORT).show();
}
});
wiekEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Btn.setEnabled(!(tempWiekEdit.getText().toString().trim().isEmpty()));
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
答案 0 :(得分:3)
在不查看布局XML的情况下,通过阅读您想要从用户那里获取2个数字的问题描述,我只能假设那些2 EditText
s为空开始了。
@Override
protected void onCreate(Bundle savedInstanceState) {
...
EditText wiekEditText = (EditText) findViewById(R.id.inWiek);
EditText tspoczEditText = (EditText) findViewById(R.id.inTspocz);
// edit text are still empty...
int wiek = Integer.parseInt(wiekEditText.getText().toString()); // error occurs!
int tspocz = Integer.parseInt(tspoczEditText.getText().toString());
...
}
您可能希望在用户互动后解析数字,可能是将代码设置为OnClickListener
或TextWatcher
此示例使用OnClickListener
。用户点击按钮后即可完成计算。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
// add 'final'
final EditText wiekEditText = (EditText) findViewById(R.id.inWiek);
final EditText tspoczEditText = (EditText) findViewById(R.id.inTspocz);
// remove offending code
final EditText tempWiekEdit = wiekEditText;
TabHost tabHost = (TabHost) findViewById(R.id.tabHost);
...
final Button Btn = (Button) findViewById(R.id.Btn);
Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// move the parsing code here
int Tmax, RT;
int wiek = Integer.parseInt(wiekEditText.getText().toString());
int tspocz = Integer.parseInt(tspoczEditText.getText().toString());
Tmax = 220 - wiek;
RT = Tmax - tspocz;
Wynik = 70*RT/100 + tspocz;
Toast.makeText(getApplicationContext(),"blablabla"+ Wynik,Toast.LENGTH_SHORT).show();
}
});
...
}
- 或 -
通过在布局XML上添加android:text="0"
来首次防止错误设置默认编号。
<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/inTspocz"
android:layout_marginTop="25dp"
android:hint="Your resting heart rate (Hint)"
android:text="0" />
答案 1 :(得分:1)
NuberFormatException
,其中该数字可能是int,float或任何其他Java数字类型。添加以下语句检查输出是什么。
System.out.println(wiekEditText.getText().toString());
这可能有助于识别字符串返回的内容。您的wiekEditText.getText().toString()
没有错误。
答案 2 :(得分:0)
您的输入可能包含前导或尾随或两者中的空格。您可以尝试使用
int wiek = Integer.parseInt(wiekEditText.getText().toString().trim());
为什么trim()?
例如:
try {
int num = Integer.parseInt(" 12 ");
System.out.println(num);
} catch (NumberFormatException e) {
System.out.println("Error " + e.toString());
}
try {
int num = Integer.parseInt(" 12 ".trim());
System.out.println(num);
} catch (NumberFormatException e) {
System.out.println("Error " + e.toString());
}
Out put:
Error java.lang.NumberFormatException: For input string: " 12 "
12
在这种情况下,如果
`wiekEditText.getText().toString()`
是null
你应该使用像
这样的验证 int num = Integer.parseInt(wiekEditText.getText().toString()!=null
?wiekEditText.getText().toString().trim():"0");
答案 3 :(得分:0)
请确保您要解析的数字不大于2,147,483,647或-2,147,483,647,这是整数最大值。
因此,在这种情况下,您可能需要使用
long varName = Long.parseLong(yourStringVar);