onClick: EditText пустой в Android studio

#java #android #android-edittext

#java #Android #android-edittext

Вопрос:

У меня самый простой код, и он работал раньше, но теперь по какой-то причине этого не происходит, и я не могу понять, почему! И проблема довольно сложна для Google.

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

     import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;

    public class MainActivity extends Activity {
    String artist;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText edit = (EditText) findViewById(R.id.artistEditText);
        artist = edit.getText().toString();

    }

    protected void tryLetter(View v){
        System.out.println(artist);
        Log.d("string", artist);
        System.out.println("hi");
    }
}
  

Исполнитель println для печати вообще не отображается, и Log.d tryletter при нажатии кнопки не вызывается and .

Вот файл макета, если это имеет значение.

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Ange en artist:"
    android:id="@ id/artistTextLabel"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="30dp" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@ id/artistEditText"
    android:layout_alignBottom="@ id/artistTextLabel"
    android:layout_alignEnd="@ id/searchBtn" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sök"
    android:id="@ id/searchBtn"
    android:onClick="tryLetter"
    android:layout_below="@ id/artistEditText"
    android:layout_centerHorizontal="true" />
</RelativeLayout>
  

Комментарии:

1. Потому что вы вызываете edit.getText().toString(); не в том месте. Вы должны были вызвать его внутри tryLetter(). Когда вы вызываете edit.getText().toString(); внутри oncreate, EditText пуст.

Ответ №1:

поместите это artist = edit.getText().toString(); внутрь этого tryLetter , потому что вам нужно извлекать текст EditText при выполнении действия onClick , и сделайте свой tryLetter метод public

потому что это будет работать только тогда, когда ваш метод public

так что используйте это

 public void tryLetter(View v){
    artist = edit.getText().toString();
    System.out.println(artist);
    Log.d("string", artist);
    System.out.println("hi");
}
  

вместо этого protected void tryLetter(View v){

Ответ №2:

В простых сценариях, подобных вашему, что-то должно запускаться для получения данных из EditText. Лучше всего было бы поместить код выборки внутри триггера, скажем, блока кода кнопки, или внутри слушателя

Ответ №3:

В вашем примере есть две ошибки:

  1. Метод tryLetter имеет защищенный модификатор. это не сделает этот
    метод видимым для макета. и вы получаете исключение:
    IllegalStateException. решение, сделав его общедоступным.
  2. Вы сохраняете неизменяемое значение содержимого EditText в виде строки внутри onCreate, присваивая его исполнителю. по умолчанию он пуст и не будет изменен позже, когда вы вставляете содержимое в EditText. Решением будет хранить экземпляр
    EditText и динамически извлекать из него строку для каждого щелчка.

Вот ваш код с двумя исправлениями:

импорт android.os.Bundle; импорт android.support.v7.app.AppCompatActivity; импорт android.util.Журнал; импорт android.view.View; импорт android.widget.Редактировать текст;

 public class MainActivity extends AppCompatActivity {
    private EditText edit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         edit = (EditText) findViewById(R.id.artistEditText);
    }

    public void tryLetter(View v){
        String artist=edit.getText().toString();
        System.out.println(artist);
        Log.d("string", artist);
        System.out.println("hi");
    }
}