Androidアプリを開発中です。
現在、URLを入力できるエリアがあり、入力した後エンターを押すと自動的にキーボードが閉じ、通信処理を行うという処理を以下のようなコードで書いております。
Kotlin
1 2private var response = “” 3 4 private inner class OnKeyListener: View.OnKeyListener { 5 6 override fun onKey(v: View?, keyCode: Int, event: KeyEvent?): Boolean { 7 if (keyCode != KeyEvent.KEYCODE_ENTER) return false 8 v as EditText 9 val s = v.text 10 val spanned = s.getSpans(0, s.length, Any::class.java) 11 if (keyCode == KeyEvent.KEYCODE_ENTER && spanned !is UnderlineSpan) { 12 //キーボードを閉じる 13 val manager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 14 manager.hideSoftInputFromWindow(v.windowToken,0) 15 val input = s.toString() 16 if (input == "") { 17 return false 18 }else{ 19 Thread { 20 response = TushinShori(url) 21 }.start() 22 return true 23 } 24 return false 25 } 26} 27
しかしこれで通信を行うと、稀に**「アプリ名」は応答していません**というダイアログが出てきてしまいます。
logcatを見たところ、以下のようなエラーが出ているようでした。
logcat
1 22020-04-22 09:54:54.968 363-378/system_process E/ActivityManager: ANR in jp.co.xxxx.アプリ名 (jp.co.xxxx.アプリ名/.MainActivity) 3 PID: 3482 4 Reason: Input dispatching timed out (Waiting to send key event because the focused window has not finished processing all of the input events that were previously delivered to it. Outbound queue length: 0. Wait queue length: 1.) 5 Load: 0.23 / 0.06 / 0.04
このエラーを発生させない、もしくは、エラーが出たとしてもダイアログで出してユーザーに見せることができないようにするにはどのように書けばいいでしょうか。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。