2013-10-04 78 views
0

您好我敢肯定,這是簡單,它只是躲避我:-)轉換領域EDITTEXT

我寫一個簡單的輔助類能夠檢查的字段說在現場陣列提供的值他們是EditText Widgets,這是正確的,我想要做的就是能夠訪問輸入到EditText字段的輸入值,請幫忙?

Field[] fields = clazz.getFields(); 

    for (Field field : fields) { 
     if (field.isAnnotationPresent(Required.class)) { 
      Log.d(TestClass.class.getName(), field.toString()); 
     } 
    } 

在此先感謝

UPDATE質疑完整的代碼

package com.mobiqube.annotations; 

import java.lang.reflect.Field; 

import android.util.Log; 
import android.widget.EditText; 

public class EditTextValidator { 

public EditTextValidator() { 
} 

public Boolean validate(Class clazz) throws IllegalArgumentException, IllegalAccessException{ 
    Boolean isValid = true; 
    Field[] fields = clazz.getFields(); 

    for (Field field : fields) { 
     if (field.isAnnotationPresent(Required.class)) { 
      Log.d(EditTextValidator.class.getName(), field.toString()); 
      if(field instanceof EditText){  
       EditText editText = (EditText)field ; 
       String txt=editText.getText().toString(); 
       Log.d(EditTextValidator.class.getName(), txt); 
      } 

     } 
    } 

    return isValid; 
} 

public String getMessage(){ 
    String returnStr = ""; 
    return returnStr; 
} 

}現在

錯誤是

if(field instanceof EditText){ // 

和 埃德itText editText =(EditText)字段;

+0

您需要的對象是您的clazz類的實例,並且您需要使用field.get(instance)。要獲得該字段表示的類,請使用field.getType() – njzk2

+0

errmm,這樣我就可以在下面的EditText editText =(EditText)field.get(field.getType()); – cghrmauritius

+0

不完全。你需要一個clazz類型的實例。你可以發表更多有關clazz對象的代碼嗎? – njzk2

回答

2

假設你有型clazz中的對象:

MyClass object = <something> 

// clazz represent the class of this object 
Class<?> clazz = object.getClass(); 
// Note that it can also be obtained by MyClass.class 

// fields represent the members of MyClass 
Field[] fields = clazz.getFields(); 

for (Field field : fields) { 
    // field is a member of MyClass 
    // To get the class of this member : 
    Class<?> c = field.getType(); 
    // To get the value of the member in the object: (object is an instance of MyClass) 
    Object o = field.get(object); 
    // If you want to know if the field represent an EditText or a derived class : 
    if (EditText.class.isAssignableFrom(c)) { 
     EditText value = (EditText) field.get(object); 
    } 
} 

關於你的問題,你需要的對象,你試圖驗證,因爲類本身是不夠的(除非你只是驗證靜態字段?)

+0

謝謝這工作的一種享受 – cghrmauritius

1

試試這個:

EditText[] fields = clazz.getFields(); 

for (EditText field : fields) { 
    Log.e("result",field.getText().toString()); 
} 
+0

你試過這個嗎?它甚至沒有編譯 – njzk2

+0

我已經提到過,它將工作,如果字段是一個EditText數組 –

+0

@cghrmauritius你可以讓我知道字段的對象類? –

0

嗨,你可以使用下面的代碼

if(field instanceof EditText){  
    EditText editText = (EditText)field ; 
    String txt=editText.getText().toString(); 
} 
+0

你嘗試過嗎?它甚至沒有編譯 – njzk2

+0

對不起,但我得到以下錯誤「不能從字段到EditText投」,任何想法請 – cghrmauritius

+0

對不起,但爲什麼這個問題投了-1 – cghrmauritius