2010-06-19 3 views
1

Я использую следующий код, чтобы принимать значения из текстового поля. Но он не работает, он дает исключение и заставляет закрывать только. Как получить значение текстового поля? Может ли кто-нибудь мне помочь?Как получить текст из edittext в android?

public class alertwithlogin extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    showDialog(1); 
} 
@Override 
protected Dialog onCreateDialog(int id) { 
    LayoutInflater factory = LayoutInflater.from(this); 
    final View textEntryView = factory.inflate(R.layout.alertedit, null); 
    return new AlertDialog.Builder(alertwithlogin.this)    
     .setTitle(R.string.alert_dialog_text_entry) 
     .setView(textEntryView) 
     .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       EditText edittext = (EditText) findViewById(R.id.username_edit); 
       Toast.makeText(getApplicationContext(),edittext.getText(),  Toast.LENGTH_SHORT).show(); 

      } 
     }) 
     .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) {      
      } 
     }) 
     .create();  
} 

}

alertedit.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<TextView 
    android:id="@+id/username_view" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_marginLeft="20dip" 
    android:layout_marginRight="20dip" 
    android:text="@string/alert_dialog_username" 
    android:gravity="left" 
    android:textAppearance="?android:attr/textAppearanceMedium" />    
<EditText 
    android:id="@+id/username_edit" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:layout_marginLeft="20dip" 
    android:layout_marginRight="20dip" 
    android:scrollHorizontally="true" 
    android:autoText="false" 
    android:capitalize="none" 
    android:gravity="fill_horizontal" 
    android:textAppearance="?android:attr/textAppearanceMedium" />   
</LinearLayout> 
+2

Можете ли вы проверить вывод logcat и посмотреть, каково фактическое исключение? – alun

ответ

4

Ваш вызов findViewByID возвращает нуль, поскольку он вызывается на вашей деятельности, и что макет не содержит элемент с таким идентификатором. Поскольку вы не проверяете, имеет ли edittext значение null, вызов метода getText() закрывается.

Если заменить:

EditText edittext = (EditText) findViewById(R.id.username_edit); 

по:

EditText edittext = (EditText) textEntryView.findViewById(R.id.username_edit); 

Ищешь в textEntryView (который вы использовали для создания диалогового окна), и это работает.

Смежные вопросы