Android 单击更新编辑文本字段时应用程序崩溃(从TextWatcher崩溃?)

Android 单击更新编辑文本字段时应用程序崩溃(从TextWatcher崩溃?),android,android-edittext,textwatcher,Android,Android Edittext,Textwatcher,当用户单击编辑文本字段以更新条目时,我的应用程序正在崩溃。但是,当字段为空并且第一次填写时,它不会崩溃 我相信我已经把这个问题缩小到错误代码(在下面的textwatcher代码中)——但是我看不出我做错了什么。在查看堆栈跟踪后,我进一步感到困惑——它似乎指向一个丢失的可绘制对象——但我看不出这两者之间有何关联。堆栈跟踪也在下面 任何帮助都将不胜感激!请给出我应该尝试的代码示例,而不仅仅是概念,这会有所帮助。提前谢谢 savesession.java中的代码 add_name.addTextCha

当用户单击编辑文本字段以更新条目时,我的应用程序正在崩溃。但是,当字段为空并且第一次填写时,它不会崩溃

我相信我已经把这个问题缩小到错误代码(在下面的textwatcher代码中)——但是我看不出我做错了什么。在查看堆栈跟踪后,我进一步感到困惑——它似乎指向一个丢失的可绘制对象——但我看不出这两者之间有何关联。堆栈跟踪也在下面

任何帮助都将不胜感激!请给出我应该尝试的代码示例,而不仅仅是概念,这会有所帮助。提前谢谢

savesession.java中的代码

add_name.addTextChangedListener(new TextWatcher() {

   @Override
    public void onTextChanged(CharSequence s, int start, int before,
        int count) {
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void afterTextChanged(Editable s) {
        Is_Valid_Person_Name(add_name);
    }
});
/*为响应此代码的注释而复制*/

 public void Is_Valid_Person_Name(EditText edt) throws NumberFormatException 
 {
    if (edt.getText().toString().length() <= 0) 
    {
        edt.setError("Accept Alphabets Only.");
        valid_name = null;
    } else if (!edt.getText().toString().matches("[a-zA-Z ]+")) 
    {
      edt.setError("Accept Alphabets Only.");
      valid_name = null;
    } else {
      valid_name = edt.getText().toString();
    }
}

您可以这样调用:
Is\u Valid\u Person\u Name(s.toString())用于检查。

因为
add\u name
是一个
EditText
。您应该在
EditText
中设置
String
,并且此方法中的参数类型是什么
is Valid\u Person\u Name(param)
EditText
还是
String
检查。

Hi用此代码更新您的is Valid\u Person\u Name方法代码。它真的对你有帮助

public void Is_Valid_Person_Name(EditText edt) throws NumberFormatException 
    {
    Drawable warning = (Drawable)getResources().getDrawable(R.drawable.ic_launcher);
    warning.setBounds(new Rect(0, 0, warning.getIntrinsicWidth(), warning.getIntrinsicHeight()));
       if (edt.getText().toString().length() <= 0) 
       {
           edt.setError("Accept Alphabets Only.",warning);
           valid_name = null;
       } 
       else if (!edt.getText().toString().matches("[a-zA-Z ]+")) 
       {
         edt.setError("Accept Alphabets Only.",warning);
         valid_name = null;
       } else {
         valid_name = edt.getText().toString();
       }
   }
public void是有效的\u人名(EditText edt)引发NumberFormatException
{
Drawable warning=(Drawable)getResources().getDrawable(R.Drawable.ic_启动器);
warning.setBounds(新的Rect(0,0,warning.getIntrinsicWidth(),warning.getIntrinsicHeight());

如果(edt.getText().toString().length()通过删除主题的
自定义项来解决此问题。我相信罪魁祸首是
自定义项
弹出窗口样式

编辑edittext框中的现有文本时,会出现一个弹出窗口,显示您正在更新的文本字段中的位置。如果自定义样式弄乱了此弹出窗口的外观,则您会看到我看到的应用程序崩溃

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- Customize your theme here.
    <item name="android:itemTextAppearance">@style/your_new_text_appearance</item>
    <item name="android:popupBackground">@style/your_new_text_appearance</item>
    <item name="android:popupMenuStyle">@style/your_new_text_appearance</item>
    <item name="android:popupWindowStyle">@style/your_new_text_appearance</item>
    -->
</style>


为什么
人名有效(添加人名)
?显示您的
Is\u Valid\u Person\u Name
方法。我刚刚在帖子中添加了Is\u Valid\u Person\u Name方法…我认为xml中出现了一些问题,您可以发布xml代码吗?您可以发布您在清单中为同一活动使用的样式和主题吗?实际上,它似乎主要是在蜂巢中出现了一些版本相关的问题id\u Person\u Name方法非常适合新条目。只有当我单击以更新已在编辑文本字段中的值时,才会导致崩溃。堆栈跟踪输出更让我困惑-可绘制文件与此有什么关系?@OmahaNebrasca:textwatcher代码正常我已经测试过它,在其他端口中有问题ok谢谢kausik-y你用更新文本测试了它,对吗(不仅仅是新文本)?再次感谢。是的,我仍然对堆栈跟踪中可绘制的引用感到困惑,在哪个设备上测试?我在Galaxy S3上测试,Android 4.3我刚刚试过这段代码(谢谢)但我仍然遇到同样的崩溃,堆栈跟踪与以前一样,还有其他想法吗?尝试使用默认主题,不要自定义它。AppCompat.light感谢Droid_Lover、MOSO和kaushik帮助解决此问题。是styles.xml导致了问题。在编辑现有文本时,会出现一个小的可绘制文件w在您正在编辑的文本中的何处-第一次输入文本时,此可绘制文件不会出现。我几乎每天使用手机时都会看到此小可绘制文件(剪切和粘贴文本、编辑TXT等),但我没有在此处建立连接。返回标准主题(删除自定义主题)后它现在可以工作了。我不需要弄清楚如何自定义我的主题,同时又不会弄乱这个绘图页。@OmahaNebrasca:从异常中可以清楚地看出,当异常提到样式错误处理时,资源丢失了。另外,试着搜索异常,你肯定会知道问题出在哪里。这stack站点是一个很好的地方,在这里你会发现ppl已经面临的问题最多。我们针对的是新的问题(有点像吃脑筋的人),而不是重复看到同样的问题。
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:itemTextAppearance">@style/your_new_text_appearance</item>
    <item name="android:popupBackground">@style/your_new_text_appearance</item>

    <item name="android:popupMenuStyle">@style/your_new_text_appearance</item>
    <item name="android:popupWindowStyle">@style/your_new_text_appearance</item>

</style>


<style name="your_new_text_appearance">
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:textSize">16dp</item>
    <item name="android:popupBackground">@drawable/rounded_corner_popupmenu</item>
    <item name="android:background">@color/purple06</item>
</style>


    <color name="blue01">#0099CC</color>
    <color name="blue02">#079DD0</color>
// In OnCreate 
CyclepopupMenu = new PopupMenu(this, findViewById(R.id.settings_breathcycle));
CyclepopupMenu.getMenu().add(Menu.NONE, 11, Menu.NONE, "5,0,5,0");
CyclepopupMenu.getMenu().add(Menu.NONE, 12, Menu.NONE, "5,3,5,3 (default)");
CyclepopupMenu.getMenu().add(Menu.NONE, 13, Menu.NONE, "5,5,5,5");
CyclepopupMenu.getMenu().add(Menu.NONE, 14, Menu.NONE, "7,5,7,5");
CyclepopupMenu.getMenu().add(Menu.NONE, 15, Menu.NONE, "9,5,9,5");
CyclepopupMenu.getMenu().add(Menu.NONE, 16, Menu.NONE, "12,5,12,5");
// In body
public void showMenuCycle(View view){
   CyclepopupMenu.show();
}
public void Is_Valid_Person_Name(EditText edt) throws NumberFormatException 
    {
    Drawable warning = (Drawable)getResources().getDrawable(R.drawable.ic_launcher);
    warning.setBounds(new Rect(0, 0, warning.getIntrinsicWidth(), warning.getIntrinsicHeight()));
       if (edt.getText().toString().length() <= 0) 
       {
           edt.setError("Accept Alphabets Only.",warning);
           valid_name = null;
       } 
       else if (!edt.getText().toString().matches("[a-zA-Z ]+")) 
       {
         edt.setError("Accept Alphabets Only.",warning);
         valid_name = null;
       } else {
         valid_name = edt.getText().toString();
       }
   }
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- Customize your theme here.
    <item name="android:itemTextAppearance">@style/your_new_text_appearance</item>
    <item name="android:popupBackground">@style/your_new_text_appearance</item>
    <item name="android:popupMenuStyle">@style/your_new_text_appearance</item>
    <item name="android:popupWindowStyle">@style/your_new_text_appearance</item>
    -->
</style>