2017-11-13 31 views
0

Android 애플리케이션에 장소 자동 완성을 구현하고 싶습니다.이 경우 Retrofit과 RxJava를 사용하고 있습니다. 나는 사용자 입력 후 2 초마다 응답을 원한다. 나는 이것을 위해 debounce 연산자를 사용하려하지만 작동하지 않습니다. 잠시 멈추지 않고 즉시 결과를 얻을 수 있습니다. @BenP이 코멘트에 말했듯이RxJava 연산자 Debounce가 작동하지 않습니다.

mAutocompleteSearchApi.get(input, "(cities)", API_KEY) 
      .debounce(2, TimeUnit.SECONDS) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .flatMap(prediction -> Observable.fromIterable(prediction.getPredictions())) 
      .subscribe(prediction -> { 
       Log.e(TAG, "rxAutocomplete : " + prediction.getStructuredFormatting().getMainText()); 
      }); 
+0

것 같습니다. 아마도 사용자 입력 이벤트를 디 바운싱해야 할 것입니다. –

답변

2

, 당신은 Place Autocomplete 서비스에 debounce을 적용하는 것으로 나타났습니다. 이 호출은 완료하기 전에 하나의 결과 (또는 오류)를내는 Observable을 반환합니다.이 시점에서 debounce 연산자는 해당 항목 만 방출합니다.

당신은 아마 같은 뭔가 사용자 입력을 디 바운싱되는 일을해야 할 것 : 네트워크 호출을 디 바운싱있는 것처럼

// Subject holding the most recent user input 
BehaviorSubject<String> userInputSubject = BehaviorSubject.create(); 

// Handler that is notified when the user changes input 
public void onTextChanged(String text) { 
    userInputSubject.onNext(text); 
} 

// Subscription to monitor changes to user input, calling API at most every 
// two seconds. (Remember to unsubscribe this subscription!) 
userInputSubject 
    .debounce(2, TimeUnit.SECONDS) 
    .flatMap(input -> mAutocompleteSearchApi.get(input, "(cities)", API_KEY)) 
    .flatMap(prediction -> Observable.fromIterable(prediction.getPredictions())) 
    .subscribe(prediction -> { 
     Log.e(TAG, "rxAutocomplete : " + prediction.getStructuredFormatting().getMainText()); 
    });