因此,我正在制作一个小应用程序,它需要用逗号分隔的列表并在该列表中返回一个随机单词,而我无法从edittext视图中获取文本。
我在stackoverflow上看到,您应该使用.getText()。toString()方法以便从edittext视图获取文本。但是,当我使用这些方法时,该应用程序停止工作。我运行了调试器,我的Input变量引用了一个空字符串,并且还收到一个错误,即没有本地提交变量。
这是java文件:
public class MainActivity extends AppCompatActivity {
EditText UserInput;
Button reset;
Button Submit;
TextView result;
String Input;
String Result;
String word;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UserInput = (EditText) findViewById(R.id.UserInput);
reset = (Button) findViewById(R.id.Reset);
Submit = (Button) findViewById(R.id.Choose);
result = (TextView) findViewById(R.id.Result);
Input = UserInput.getText().toString();
Result = "Your choice should be:";
Submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Random random = new Random();
String[] List = Input.split(",");
int num = random.nextInt(List.length - 1);
word = List[num];
Result = Result + word;
result.setText(Result);
}
});
}
这是活动的edittext视图:
<EditText
android:id="@+id/UserInput"
android:layout_width="273dp"
android:layout_height="59dp"
android:layout_marginStart="8dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="8dp"
android:ems="10"
android:hint="Choice A, Choice B, Choice C,..."
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.515"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/Instructions" />
例如,如果我在edittext视图“ a,b”中编写。我希望输入为'a,b',但不是。当我调试时,它显示了一个空字符串,我不知道为什么。也。我收到另一个错误,即onclick方法中没有本地Submit变量。如何解决这些错误?
答案 0 :(得分:3)
您在声明时从EditText
获取文本,因为Input
为空。 Input
未观看要更改其内容的编辑文本。
为此,您必须在提交之前再次获得输入。
Submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Random random = new Random();
Input = UserInput.getText().toString();
if (Input != null) {
String[] List = Input.split(",");
int num = random.nextInt(List.length - 1);
word = List[num];
Result = Result + word;
result.setText(Result);
}
}
});
答案 1 :(得分:2)
在Input = UserInput.getText().toString();
方法内移动onClick
。
Submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Input = UserInput.getText().toString();
Random random = new Random();
String[] List = Input.split(",");
int num = random.nextInt(List.length - 1);
word = List[num];
Result = Result + word;
result.setText(Result);
}
}
仅在单击按钮时才需要阅读EditText
,而在应用首次启动时则不需要阅读。{p>
Layman的解释:
在您当前的代码中,启动应用程序时,您会阅读EditText
。由于当时它为空,因此在阅读时会得到一个空字符串。
答案 2 :(得分:0)
调试器显示空字符串,在这种情况下,num
可能变为0,这可能会导致IndexOutOfBounds
异常。
String[] List = Input.split(",");
int num = random.nextInt(List.length - 1);
word = List[num];
发布日志以获得进一步的帮助。