2016-10-07 2 views
2

Ich habe den einfachsten Code und es vor gearbeitet haben, aber jetzt aus irgendeinem Grund ist es nicht, und ich kann, warum nicht herausfinden! Und das Problem ist ziemlich schwer zu googeln.onClick: EditText leer in Android Studio

Ich bin nicht in der Lage den Text aus den EditText zu bekommen. Ich habe ein neues Projekt erstellt, ich habe den genauen Code von einem anderen Projekt kopiert (wo es funktioniert), aber hier wird es einfach nicht funktionieren. Ich hoffe, dass das Problem wirklich offensichtlich ist und ich habe es einfach zu lange angeguckt.

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

Die println Künstler drucken überhaupt nicht angezeigt und auch nicht die Log.d und tryletter aufgerufen werden, wenn ich eine Taste drücken. Hier

ist die Layout-Datei, wenn es einen Unterschied macht.

<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

Weil Sie 'edit.getText(). ToString();' an der falschen Stelle aufrufen. Sie sollten es innerhalb von tryLetter() aufgerufen haben. Wenn Sie 'edit.getText(). ToString();' oncreate aufrufen, ist der EditText leer. – birraa

Antwort

4

setzen diese artist = edit.getText().toString(); in diesem tryLetter, weil Sie den Text aus EditText holen müssen, wenn Aktion Mittelwert onClick durchgeführt wird und Ihre tryLetter Methode machen public

, weil es nur dann, wenn funktioniert Ihre Methode ist public

so diese anstelle dieses wie das Ihre protected void tryLetter(View v){

0

In einfachen Szenarien

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

verwenden, muss etwas auszulösen, die Daten aus dem EditText zu bekommen. Am besten wäre es, um den Code holen zu platzieren, in einem Trigger sagt eine Codeblock der Schaltfläche oder innerhalb eines Zuhörers

0

In Ihrem Beispiel gibt es zwei Fehler:

  1. Methode tryLetter Modifikator geschützt ist. das macht diese
    Methode für das Layout nicht sichtbar. und Sie bekommen Ausnahme:
    Illegal. Lösung, indem es öffentlich gemacht wird.
  2. Sie halten unveränderlichen Wert Inhalt EditText als String in onCreate indem sie sie in Künstler zuweisen. Es ist standardmäßig leer und wird später nicht mehr geändert, wenn Sie Inhalte in EditText einfügen. Lösung Instanz von
    EditText zu halten und extrahieren String aus es jeder für klicken dynamisch.

Hier ist der Code mit zwei Korrekturen:

Import android.os.Bundle; importieren android.support.v7.app.AppCompatActivity; importieren android.util.Log; importieren android.view.View; importieren 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"); 
    } 
} 
Verwandte Themen