Android setError在PopupWindow中包含EditText

Android setError在PopupWindow中包含EditText,android,Android,所以我在PopupWindow中有EditText输入,我试图通过一些检查来验证这个字段,然后用setError方法设置错误。我犯了以上错误:/你知道怎么了吗 02-16 13:06:21.702: W/dalvikvm(5138): threadid=1: thread exiting with uncaught exception (group=0x4001d560) 02-16 13:06:21.713: E/AndroidRuntime(5138): FATAL EXCEPTION: m

所以我在PopupWindow中有EditText输入,我试图通过一些检查来验证这个字段,然后用setError方法设置错误。我犯了以上错误:/你知道怎么了吗

02-16 13:06:21.702: W/dalvikvm(5138): threadid=1: thread exiting with uncaught exception (group=0x4001d560)
02-16 13:06:21.713: E/AndroidRuntime(5138): FATAL EXCEPTION: main
02-16 13:06:21.713: E/AndroidRuntime(5138): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@405c3bd0 is not valid; is your activity running?
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.view.ViewRoot.setView(ViewRoot.java:533)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at     android.view.WindowManagerImpl.addView(WindowManagerImpl.java:200)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:114)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.widget.PopupWindow.invokePopup(PopupWindow.java:907)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:819)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.widget.TextView.showError(TextView.java:3438)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.widget.TextView.setError(TextView.java:3409)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.widget.TextView.setError(TextView.java:3373)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at com.example.zoopiekuj.MenuActions$5.onClick(MenuActions.java:185)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.view.View.performClick(View.java:2538)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.view.View$PerformClick.run(View.java:9152)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.os.Handler.handleCallback(Handler.java:587)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.os.Looper.loop(Looper.java:130)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at android.app.ActivityThread.main(ActivityThread.java:3687)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at java.lang.reflect.Method.invokeNative(Native Method)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at java.lang.reflect.Method.invoke(Method.java:507)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
02-16 13:06:21.713: E/AndroidRuntime(5138):     at dalvik.system.NativeStart.main(Native Method)
final float scale=context.getResources().getDisplayMetrics().density;
int popupWidth=(int)(300*刻度+0.5f);
内景灯光=(内景)(345*比例+0.5f);
LinearLayout视图组=(LinearLayout)context.findViewById(R.id.popupreg);
LayoutInflater LayoutInflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
layout=LayoutFlater.充气(R.layout.logregpopup,视图组);
弹出窗口=新的弹出窗口(上下文);
popup.setContentView(布局);
popup.setWidth(popupWidth);
popup.setHeight(PopupLight);
popup.setFocusable(true);
popup.setBackgroundDrawable(新的BitmapDrawable());
弹出显示位置(布局,重力,底部,0,90);
按钮btnreg=(按钮)布局。findViewById(R.id.btnregister);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
progressDialog=progressDialog.show(上下文,“adowanie”,“poczekaj prosz!”);
getmethod=1;
int err=0;
TextHelper thelper=新的TextHelper();
EditText login=(EditText)layout.findviewbyd(R.id.reglogin);
EditText email=(EditText)layout.findviewbyd(R.id.regemail);
EditText pass1=(EditText)layout.findViewById(R.id.regpass1);
EditText pass2=(EditText)layout.findViewById(R.id.regpass2);
字符串l=login.getText().toString();
字符串e=email.getText().toString();
字符串p1=pass1.getText().toString();
字符串p2=pass2.getText().toString();
如果(l.equals(“”| | l.length()<3){
err++;
login.setError(“login musi miećco najmniej 3 znaki”);
}

我可以毫无问题地从登录字段中获取文本,因此setError只是有点问题。

此行中的上下文是调用活动吗

弹出窗口=新的弹出窗口(上下文)


如果它是一个死的/过时的活动或应用程序上下文,它会像这样失败。

这个弹出窗口不是问题(我认为),因为它工作得很好。问题是当login.setError(“login musi miećco najmniej 3 znaki”)发生时。你找到解决方案了吗?
       final float scale = context.getResources().getDisplayMetrics().density;
   int popupWidth  =  (int) (300 * scale + 0.5f);
   int popupHeight = (int) (345 * scale + 0.5f);

   LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.popupreg);
   LayoutInflater layoutInflater = (LayoutInflater) context
   .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

   layout = layoutInflater.inflate(R.layout.logregpopup, viewGroup);
       popup = new PopupWindow(context);
       popup.setContentView(layout);
       popup.setWidth(popupWidth);
       popup.setHeight(popupHeight);
       popup.setFocusable(true);
       popup.setBackgroundDrawable(new BitmapDrawable());
       popup.showAtLocation(layout, Gravity.BOTTOM,0,90);

       Button btnreg = (Button) layout.findViewById(R.id.btnregister);
       btnreg.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View arg0) {
                 progressDialog = ProgressDialog.show(context, "Ładowanie", "poczekaj proszę !");

                 getmethod = 1;

                 int err = 0;

                 TextHelper thelper = new TextHelper();

                 EditText login     = (EditText) layout.findViewById(R.id.reglogin);
                 EditText email     = (EditText) layout.findViewById(R.id.regemail);
                 EditText pass1     = (EditText) layout.findViewById(R.id.regpass1);
                 EditText pass2     = (EditText) layout.findViewById(R.id.regpass2);



                 String l  = login.getText().toString();
                 String e  = email.getText().toString();
                 String p1 = pass1.getText().toString();
                 String p2 = pass2.getText().toString();

                 if(l.equals("") || l.length() < 3){
                     err++;
                     login.setError("Login musi mieć co najmniej 3 znaki");
                 }