2016-10-07 4 views
2

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

Я не могу получить текст с 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 вызывается при нажатии на кнопку.

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

<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();' inside oncreate, EditText пуст. – birraa

ответ

4

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

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

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

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){

0

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

0

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

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

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

импорта android.os.Bundle; import android.support.v7.app.AppCompatActivity; импорт android.util.Log; импорт android.view.View; import android.widget.EditText;

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