Omaha Nebrasca
Omaha Nebrasca

Reputation: 67

App crashing when click to update edit text field (crashing from TextWatcher?)

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

Answers (4)

Omaha Nebrasca
Omaha Nebrasca

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

Sats
Sats

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

Kaushik
Kaushik

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

Rustam
Rustam

Reputation: 6515

you can call like this : Is_Valid_Person_Name(s.toString()); for checking.

Upvotes: 0

Related Questions