2012-09-27 37 views
2

我有一個簡單的應用程序,它有一個edittext字段和一個按鈕。該按鈕我想獲取edittext字段的值並將其存儲到一個字符串中(稍後解析)。但是,即使使用getEditableText()方法讀取值,我也會陷入困境。我打印出Log.d()的值,但該值看起來是空的或至少是一個空字符串。我哪裏錯了?Android 2.1 getEditableText()返回空/空字符串

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="26dp" 
     android:text="@string/title" 
     tools:context=".MainActivity" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="38dp" 
     android:inputType="text" 
     android:ems="10" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/editText1" 
     android:layout_centerHorizontal="true" 
     android:text="@string/button1" 
     android:onClick="createarray" /> 

</RelativeLayout> 

MainActivity.java

package com.example.hw1; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    int[] numberarray; 

    public void createarray(View v){ 
     setContentView(R.layout.activity_main); 
     //EditText editText1 = (EditText)findViewById(R.id.editText1); 
     //Toast.makeText(this,editText1.getText().toString(), 
     //Toast.LENGTH_SHORT).show(); 
     //String etoutput = editText1.getText().toString(); 
     String etoutput = ((EditText)findViewById(R.id.editText1)).getEditableText().toString().trim(); 
     Log.d("etoutput",etoutput); 
     if(etoutput.length() > 0){ 
      Log.d("etoutput length","its got something"); 
     } 
     else{ 
      Log.d("etoutput length","EMPTY!!"); 
     } 
     //Log.d("etoutput","in here"); 
     //Log.d("etoutput",etoutput); 
     String[] sepetoutput = etoutput.split("[\\s,]+"); 

     numberarray = new int[sepetoutput.length]; 

     for (int i=0;i<sepetoutput.length;i++){ 
      try{ 
       Log.d("i",Integer.toString(i)); 
       numberarray[i] = Integer.parseInt(sepetoutput[i]); 
      }catch(NumberFormatException nfe){   

      } 
     } 

     Toast.makeText(this,"Array size: " + numberarray.length, 
       Toast.LENGTH_SHORT).show(); 
     ((EditText)findViewById(R.id.editText1)).setText("123456"); 

    } 
} 

回答

2

你每次調用setContentView()按下button。此操作會將EditText重置爲您在Xml佈局中定義的狀態(該狀態爲空)。刪除createarray方法的那一行,你應該得到你想要的。

+0

哦!感謝這工作! – gqdabien

+0

@gqdabien great和np – Aprian

0

你試過:

String etoutput = (EditText)findViewById(R.id.editText1)).getText().toString().trim(); 
+0

是的,我有getText()在第一次,但嘗試getEditTableText()後閱讀了類似的職位。仍然沒有運氣,得到0長度字符串回來。 – gqdabien

+0

實際上是否存在EditText中的文字? –

0

我想你應該在OnCreate過程中調用createarray函數。

+0

nope,不需要調用,因爲'createarray'基本上是一個'onClick'方法,當點擊'onClick ='createarray''屬性的'button'時,會觸發'onClick'方法。 – Aprian