在Android Studio中单击按钮时,onClickListener会使应用程序崩溃
我正试图提出一个应用程序,其中的字对不起!单击按钮后,将打印与用户按钮给出的输入相同的时间。即使我尝试在onclicklistener中设置Toast,应用程序也不会崩溃,但Toast不会形成。我认为Java文件中存在一些问题。 以下是java文件:在Android Studio中单击按钮时,onClickListener会使应用程序崩溃,android,android-studio,onclicklistener,Android,Android Studio,Onclicklistener,我正试图提出一个应用程序,其中的字对不起!单击按钮后,将打印与用户按钮给出的输入相同的时间。即使我尝试在onclicklistener中设置Toast,应用程序也不会崩溃,但Toast不会形成。我认为Java文件中存在一些问题。 以下是java文件: package com.example.satvara.vipul.instantmessage; import android.support.v7.app.AppCompatActivity; import android.os.Bu
package com.example.satvara.vipul.instantmessage;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Sorry extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sorry);
this.setTitle(R.string.activity_sorry);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
EditText editText= findViewById(R.id.editText);
String str = editText.getText().toString();
final int i= Integer.parseInt(str);
final TextView textView=findViewById(R.id.textView);
Button btn=findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int j=0; j>i;j++){
textView.setText("Sorry!");
}
}
});
}
}
以下是XML文件:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
tools:context=".Sorry">
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Number:"
android:padding="10dp"
android:textSize="20dp"
android:textColor="@color/text"
android:layout_column="1"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Enter Here"
android:paddingLeft="7dp"
android:paddingRight="7dp"
android:backgroundTint="@color/colorPrimaryDark"
android:textCursorDrawable="@drawable/cursor_color"
android:inputType="number"
android:id="@+id/editText"/>
</TableRow>
<TableRow>
<Button
android:layout_column="2"
android:hint="Send via Whatsapp"
android:id="@+id/btn"
></Button>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView">
</TextView>
</TableRow>
</TableLayout>
</android.support.constraint.ConstraintLayout>
问题在于这些方面:
String str = editText.getText().toString();
final int i= Integer.parseInt(str);
尚未在活动的onCreate方法的UI上创建EditText
在整个UI形成之后,您需要通过一些UI事件读取值
例如,单击按钮时可以读取编辑文本
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = editText.getText().toString();
int i= Integer.parseInt(str);
for (int j=0; j>i;j++){
textView.setText("Sorry!");
}
}
});
在上面的代码中,TextView中的文本将在每次循环后被覆盖。因此,对于i>=1的任何值,您将只看到一个抱歉!在文本视图中。您必须在onClick中输入get edit text。您的for循环条件错误。即使它是正确的,您也只是在为i次设置相同的文本。您应该只在设置yourString的值时使用循环,然后在循环超过setTextyourString时使用循环
public class Sorry extends AppCompatActivity {
EditText edittext;
TextView textView;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sorry);
this.setTitle(R.string.activity_sorry);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
editText= findViewById(R.id.editText);
textView=findViewById(R.id.textView);
btn=findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = editText.getText().toString();
int i= Integer.parseInt(str);
String myText="";
for (int j=0; j<i;j++){
myText=myText.concat("Sorry \n");
}
textView.setText(myText);
}
});
}
};