#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:
В вашем примере есть две ошибки:
- Метод tryLetter имеет защищенный модификатор. это не сделает этот
метод видимым для макета. и вы получаете исключение:
IllegalStateException. решение, сделав его общедоступным. - Вы сохраняете неизменяемое значение содержимого 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");
}
}