我想验证我的文本框。我创建了一个具有验证的Java类。我正在使用setError(味精,图标);如何使用getResources()为非活动类
事情是这样的:
public class Validate
{
public static boolean hasText(EditText editText)
{
String text = editText.getText().toString().trim();
editText.setError(null);
if (text.length() == 0)
{
errorIcon = context.getResources().getDrawable(R.drawable.alert);
errorIcon.setBounds(new Rect(0, 0, errorIcon.getIntrinsicWidth(), errorIcon.getIntrinsicHeight()));
editText.setError((REQUIRED_MSG), errorIcon);
return false;
}
return true;
}
}
而且我的活动的java文件中有这样的:
@Override
protected void onCreate(Bundle savedInstanceState)
{
fname =(EditText)findViewById(R.id.fname);
fname.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s)
{
Validate.hasText(fname);
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
我试过如下:
public Validate(Context context)
{
this.context = context;
}
}
我收到以下错误:
02-23 13:30:58.718: E/AndroidRuntime(1334): FATAL EXCEPTION: main
02-23 13:30:58.718: E/AndroidRuntime(1334): java.lang.NullPointerException
02-23 13:30:58.718: E/AndroidRuntime(1334): at com.zin.testText.Text_Validate.hasText(Text_Validate.java:65)
02-23 13:30:58.718: E/AndroidRuntime(1334): at com.zin.testText.Text_Form$1.afterTextChanged(Text_Form.java:107)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.widget.TextView.sendAfterTextChanged(TextView.java:7320)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:9073)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:970)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:497)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:673)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:197)
02-23 13:30:58.718: E/AndroidRuntime(1334): at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183)
02-23 13:30:58.718: E/AndroidRuntime(1334): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:279)
02-23 13:30:58.718: E/AndroidRuntime(1334): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.os.Looper.loop(Looper.java:137)
02-23 13:30:58.718: E/AndroidRuntime(1334): at android.app.ActivityThread.main(ActivityThread.java:5103)
02-23 13:30:58.718: E/AndroidRuntime(1334): at java.lang.reflect.Method.invokeNative(Native Method)
02-23 13:30:58.718: E/AndroidRuntime(1334): at java.lang.reflect.Method.invoke(Method.java:525)
02-23 13:30:58.718: E/AndroidRuntime(1334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-23 13:30:58.718: E/AndroidRuntime(1334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-23 13:30:58.718: E/AndroidRuntime(1334): at dalvik.system.NativeStart.main(Native Method)
有人可以帮我解决这个问题吗?