Reputation: 67
My app is crashing when the user clicks on an edit text field to update the entry. However, it doesn't crash when the field is blank and is being filled out the first time.
I believe I've narrowed down this down to the faulty code (in textwatcher code below) - however I can't see what I'm doing wrong. I'm further confused after looking at the stack trace - which appears to point to a missing drawable - but I can't see how these two are related. The stack trace is below as well.
Any help here would be appreciated! Please if you can give code examples on what I should try rather than just concepts it would help. Thanks in advance
Code in 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);
}
});
/* Copied in in response to comments for this code */
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();
}
}
Relevant section of stack trace:
09-27 00:09:11.295 13910-13910/com.yodalabs.buddhabreath E/InputEventReceiver﹕ Exception dispatching input event.
09-27 00:09:11.295 13910-13910/com.yodalabs.buddhabreath D/AndroidRuntime﹕ Shutting down VM
09-27 00:09:11.305 13910-13910/com.yodalabs.buddhabreath W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41841898)
09-27 00:09:11.345 13910-13910/com.yodalabs.buddhabreath E/AndroidRuntime﹕ FATAL EXCEPTION: main android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f090001 a=1 r=0x7f090001}
at android.content.res.Resources.loadDrawable(Resources.java:2946)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.PopupWindow.<init>(PopupWindow.java:206)
at android.widget.PopupWindow.<init>(PopupWindow.java:190)
savesession.xml
<EditText
android:id="@+id/add_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Name"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/add_comment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Comment"
android:inputType="textPersonName">
</EditText>
styles.xml
<!-- 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>
settings.java
// 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();
}
Upvotes: 1
Views: 1754
Reputation: 67
This issue was fixed by removing the customization to the theme
. I believe the culprit was the customization
to popupWindowStyle
.
When editing existing text in a edittext box - a popup appears to show you where in the text field you are updating. If custom style mess up the appearance of this popup then you get the app crashes that I was getting.
<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>
Upvotes: 0
Reputation: 885
Hi update your Is_Valid_Person_Name method code with this code . It really helps you.
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();
}
}
change the drawable icon according to you.
Upvotes: 1
Reputation: 6162
Because add_name
is an EditText
. You should set String
in EditText
and what is the type of parameter in this method Is_Valid_Person_Name(param)
is it EditText
or String
check that.
Upvotes: 0
Reputation: 6515
you can call like this : Is_Valid_Person_Name(s.toString());
for checking.
Upvotes: 0