在Android Studio中单击按钮时,onClickListener会使应用程序崩溃

在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

我正试图提出一个应用程序,其中的字对不起!单击按钮后,将打印与用户按钮给出的输入相同的时间。即使我尝试在onclicklistener中设置Toast,应用程序也不会崩溃,但Toast不会形成。我认为Java文件中存在一些问题。 以下是java文件:

    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);
                }
            });

        }

    };