EditText 无法获取数据,给出空字符串
EditText not able to fetch data, giving null string
问题是(在 FirstPage.java 中)getText() 正在从 EditText 读取一个空字符串,而不是我输入的值。
一旦应用程序启动,即 FirstPage activity 开始,Edit Text 就会捕获空字符串,然后我在该字段中输入的任何内容都不会被考虑。然后当按下名为 click 的按钮时,仅捕获空字符串,因此始终给出 NumberFormat Exception。
如何解决?
代码:
( FirstPage.java )
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_page);
Click = findViewById(R.id.click);
Text = findViewById(R.id.text);
try {
number = Integer.parseInt(Text.getText().toString());
}catch (NumberFormatException e){
number = 2; //the problem is here getText() is always getting null string
//and hence catch statement is always getting executed
}
Click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent ii= new Intent(FirstPage.this, MainActivity.class);
ii.putExtra("value", number);
startActivity(ii);
}
});
}
XML FirstPage.java 代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".FirstPage">
<EditText
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="20dp"
android:hint="Enter no of ques"
android:layout_marginTop="30dp"/>
<Button
android:id="@+id/click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="Click"/>
</LinearLayout>
MainActivity.class 代码部分:
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
value = bundle.getInt("value");
}
我无法理解我到底做错了什么,请帮忙。提前感谢您的帮助。
你写错了。 try-catch 块必须在 setOnClickListener
内,因为只有在按下按钮时才会使用字符串。所以一定要这么写。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_page);
Click = findViewById(R.id.click);
Text = findViewById(R.id.text);
Click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
number = Integer.parseInt(Text.getText().toString());
} catch (NumberFormatException e){
number = 2;
}
Intent ii= new Intent(FirstPage.this, MainActivity.class);
ii.putExtra("value", number);
startActivity(ii);
}
});
}
问题是(在 FirstPage.java 中)getText() 正在从 EditText 读取一个空字符串,而不是我输入的值。 一旦应用程序启动,即 FirstPage activity 开始,Edit Text 就会捕获空字符串,然后我在该字段中输入的任何内容都不会被考虑。然后当按下名为 click 的按钮时,仅捕获空字符串,因此始终给出 NumberFormat Exception。 如何解决?
代码: ( FirstPage.java )
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_page);
Click = findViewById(R.id.click);
Text = findViewById(R.id.text);
try {
number = Integer.parseInt(Text.getText().toString());
}catch (NumberFormatException e){
number = 2; //the problem is here getText() is always getting null string
//and hence catch statement is always getting executed
}
Click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent ii= new Intent(FirstPage.this, MainActivity.class);
ii.putExtra("value", number);
startActivity(ii);
}
});
}
XML FirstPage.java 代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".FirstPage">
<EditText
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="20dp"
android:hint="Enter no of ques"
android:layout_marginTop="30dp"/>
<Button
android:id="@+id/click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="Click"/>
</LinearLayout>
MainActivity.class 代码部分:
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
value = bundle.getInt("value");
}
我无法理解我到底做错了什么,请帮忙。提前感谢您的帮助。
你写错了。 try-catch 块必须在 setOnClickListener
内,因为只有在按下按钮时才会使用字符串。所以一定要这么写。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_page);
Click = findViewById(R.id.click);
Text = findViewById(R.id.text);
Click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
number = Integer.parseInt(Text.getText().toString());
} catch (NumberFormatException e){
number = 2;
}
Intent ii= new Intent(FirstPage.this, MainActivity.class);
ii.putExtra("value", number);
startActivity(ii);
}
});
}