2016-06-23 1 views
0

ユーザーがAndroid(EditText)で別のプロセスで入力したテキスト入力検証の実行に関する質問がありました。私は理想的には、同じアプリケーション内でそれを持つ方がよいと知っていますが、入力検証は他のプロセスでチェックする必要があります。これは避けてください...バックエンド/その他のプロセスでのAndroidテキスト入力の検証

私はプロセス間通信の設定を既に持っています問題。さらに、ユーザーがキーを入力すると問題がないように、EditTextのテキスト入力リスナーがわかります。ここでの問題は、ユーザーが文字を入力するたびにテキスト検証を実行する必要があり、文字が検証をパスしない場合、文字を入力しないようにする必要があります。

あなたが知っているように、私はUIスレッドでこのチェックを行うことはできませんが、同時に、検証が完了するまでユーザ入力を「hault」する必要があります。これはどうすればいいですか?私はここで少し失われています。どんな助けでも大歓迎です。

+0

バンプを追加すると** –

答えて

0

だから、代わりにEditTextビューに入力フィルタを設定します。それから私はバックエンドのチェックをしているときにいくつかのフラグをセットしておく(検証する)。検証が完了する前にユーザーが入力した場合、このフラグをチェックとして使用します。私は入力を無視して、空の文字を返します(これは何も要求しません)。それは少しclunkyしかし、それは動作します。

0

2つのリモートサービス(ユーザーがテキストを入力することを別のプロセスに伝えるためのサービスと、リモートプロセスからのコールバック(アプリケーションに実装されている))を使用できます。リモートサービスにバインドしてコールバックを登録し(Googleリモートサービスの例https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.java)、このコールバックのテキストの編集状態を変更します。 RxJavaライブラリを使用してユーザ入力を処理する便利な方法もあります。--debounce()演算子を使用して、編集されたシンボルごとにリモート処理を実行しないようにします。

+0

となり、私は他のプロセスとの親切なつながりがあります。 boolean valid = input.validateInput(x)ここで 'x'は入力文字で、有効な入力があればboolを返します。明らかに、これを行うには 'input.validateInput(x)'はUIスレッドの外で実行する必要があります。私が考えることができる唯一のことは、文字入力イベントを聞くこと、キーボードを無効にすること、別々のスレッドでチェックを実行すること、そしてキーボードを有効にし、入力を送るUIスレッドで結果を投稿することです。あなたのReactiveXライブラリは本当に面白く見え、学ぶのに時間がかかります。 –

+0

だから私はあなたが言及したそのRxJavaをもっと見ました。私は他の地域でも使うつもりだと思いますが、このような状況では私はそれが私を助けてくれるとは思わないのです。私は本質的にユーザーが何かキーを押した後に何か入力することを許さないようにする必要があるので、私はチェックをすることができます。そして、それが通過すれば、 –