Как решить, когда метод getLayout() в edittext становится нулевым, когда изменения конфигурации в Android

Я пытаюсь получить одну строку из многострочного Edittext в его addTextChangeListener, используя интерфейс textwatcher.

Я хотел обновить другой EditText с единственной первой строкой этого EditText. Все работает нормально, кроме случаев, когда устройство поворачивается, активность и все приложение завершаются

public class CreateNoteActivity extends AppCompatActivity {

private EditText etNote, etNoteTitle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create_note);
    setTitle("Write Note");

    etNoteTitle = findViewById(R.id.etNoteTitle);
    etNote = findViewById(R.id.etNote);
    etNote.requestFocus();

    etNote.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            int start = etNote.getLayout().getLineStart(0);
            int end = etNote.getLayout().getLineEnd(0);
            String title = etNote.getText().subSequence(start, end).toString();
            etNoteTitle.setText(title);




        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });
}

}

но при изменении конфигурации, то есть при повороте экрана, возникает следующая ошибка, есть ли другой способ получить одну строку текста из многострочного Edittext, если это так, то было бы очень признателен заранее спасибо

1-21 16:47:28.792 12534-12534/com.example.haadee.noteitdown E/AndroidRuntime: FATAL EXCEPTION: main
                                                                           Process: com.example.haadee.noteitdown, PID: 12534
                                                                           java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.haadee.noteitdown/com.example.haadee.noteitdown.ui.CreateNoteActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.text.Layout.getLineStart(int)' on a null object reference
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2678)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2743)
                                                                               at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4560)
                                                                               at android.app.ActivityThread.-wrap19(ActivityThread.java)
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1496)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                               at android.os.Looper.loop(Looper.java:154)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:6165)
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
                                                                            Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.text.Layout.getLineStart(int)' on a null object reference
                                                                               at com.example.haadee.noteitdown.ui.CreateNoteActivity$1.onTextChanged(CreateNoteActivity.java:39)
                                                                               at android.widget.TextView.sendOnTextChanged(TextView.java:8231)
                                                                               at android.widget.TextView.setText(TextView.java:4512)
                                                                               at android.widget.TextView.setText(TextView.java:4366)
                                                                               at android.widget.EditText.setText(EditText.java:89)
                                                                               at android.widget.TextView.setText(TextView.java:4341)
                                                                               at android.widget.TextView.onRestoreInstanceState(TextView.java:4232)
                                                                               at android.view.View.dispatchRestoreInstanceState(View.java:15767)
                                                                               at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3240)
                                                                               at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3240)
                                                                               at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3240)
                                                                               at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3240)
                                                                               at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3240)
                                                                               at android.view.View.restoreHierarchyState(View.java:15745)
                                                                               at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2106)
                                                                               at android.app.Activity.onRestoreInstanceState(Activity.java:1051)
                                                                               at android.app.Activity.performRestoreInstanceState(Activity.java:1006)
                                                                               at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1196)
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2651)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2743) 
                                                                               at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4560) 
                                                                               at android.app.ActivityThread.-wrap19(ActivityThread.java) 
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1496) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                               at android.os.Looper.loop(Looper.java:154) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:6165) 
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) 

1 ответ

Решение

Метод getTayxt () EditText может быть нулевым при повороте устройства. так безопасный способ сделать нулевую проверку в первую очередь.

Обновить метод до:

@Override
    public void onTextChanged(CharSequence s, int i, int before, int count) {
        // do null check here
        if (etNote.getLayout() != null) {
            int start = etNote.getLayout().getLineStart(0);
            int end = etNote.getLayout().getLineEnd(0);
            String title = etNote.getText().subSequence(start, end).toString();
            etNoteTitle.setText(title);
        }

    } 
Другие вопросы по тегам