splitwise / TokenAutoComplete

Gmail style MultiAutoCompleteTextView for Android
Apache License 2.0
1.3k stars 384 forks source link

Null exception with keyboard validation #421

Closed J-Jamet closed 1 year ago

J-Jamet commented 2 years ago

An exception is raised when the "validated" key is pressed on the virtual keyboard, (sometimes the same with the "," key).

2021-10-17 12:27:46.597 27927-27927/- E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter keyEvent
        at com.tokenautocomplete.TokenCompleteTextView.onEditorAction(Unknown Source:8)
        at android.widget.TextView.onEditorAction(TextView.java:7058)
        at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:138)
        at android.view.inputmethod.InputConnectionWrapper.performEditorAction(InputConnectionWrapper.java:205)
        at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:363)
        at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:93)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

implementation "com.splitwise:tokenautocomplete:4.0.0-beta04"

Complementary code :

class TagsCompletionView @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null
) : TokenCompleteTextView<String>(context, attrs) {

    private val layoutInflater = context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE)
            as? LayoutInflater?

    init {
        allowCollapse(false)
        setTokenizer(CharacterTokenizer(listOf(',', ';'), ','))
    }

    override fun defaultObject(completionText: String): String {
        return completionText
    }

    override fun getViewForObject(obj: String): View? {
        val viewGroup = layoutInflater?.inflate(R.layout.item_tag_edit, parent as ViewGroup, false)
                as? ViewGroup?
        viewGroup?.findViewById<TextView>(R.id.tag_name)?.apply {
            text = obj
        }
        return viewGroup
    }

    override fun shouldIgnoreToken(token: String): Boolean {
        return objects.contains(token)
    }
}

I did not study in detail where the problem could come from. Thank you for your useful project in any case.