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