Как правильно использовать Rxjava?

Есть сайт, получаю с него html страницу при помощи networkUtils.getInfo(), в качестве клиента использую AsyncHttpClient.
В onNext() должен парситься, но парсинг проходит раньше чем ответ от сервера. Соответственно, ничего на выходе нет. Почему так происходит? Может из-зи асинхронного клиента?
Observable<String> myObservable = Observable.create(
                new Observable.OnSubscribe<String>() {
                    @Override
                    public void call(Subscriber<? super String> sub) {
                        sub.onNext(networkUtils.getInfo());
                        sub.onCompleted();
                    }
                }
        );

        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onNext(String s) {
                 Toast.makeText(getApplicationContext(), "1!!!", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onCompleted() {
                Toast.makeText(getApplicationContext(), "2!!!", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(Throwable e) { }
        };

        myObservable.subscribe(mySubscriber);


Toast выходят, соответственно, 1 , 2 и ОК от запроса к серверу.
Спасибо.

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.PersistentCookieStore;
import com.loopj.android.http.RequestParams;
import com.loopj.android.http.TextHttpResponseHandler;

import java.util.Calendar;

import cz.msebera.android.httpclient.Header;

public class NetworkUtils {

    private AsyncHttpClient client;
    public boolean connected;
    private Context context;

    public NetworkUtils(Context context, NetClient netClient) {
        this.client = netClient.client;
        this.context = context;
        this.connected = false;
    }

    public boolean connect(final String userName, final String userPass){

        PersistentCookieStore myCookieStore = new PersistentCookieStore(context);
        client.setCookieStore(myCookieStore);
        RequestParams params = new RequestParams();
        params.put("login", userName);
        params.put("pass", userPass);

        client.post(LOGIN_URL, params, new TextHttpResponseHandler() {

            @Override
            public void onStart() {/*called before request is started*/}

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                // called when response HTTP status is "4XX" (eg. 401, 403, 404)
                if (statusCode==302) {
                    Toast.makeText(context, "Connect OK!!!", Toast.LENGTH_SHORT).show();
                    connected=true;
                }
                else{
                    Toast.makeText(context, "Connect NOT OK!!!", Toast.LENGTH_SHORT).show();
                    connected=false;
                }
            }

            @Override
            public void onRetry(int retryNo) {/*called when request is retried*/}
        });
        return connected;
    }


    public String getInfo(){

        final String[] info = {""};

        client.get(INFO_URL,new TextHttpResponseHandler() {

            @Override
            public void onStart() {/* called before request is started*/}

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {

                Toast.makeText(context, "Get info OK!!!", Toast.LENGTH_SHORT).show();
                info[0] = responseString;

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                // called when response HTTP status is "4XX" (eg. 401, 403, 404)
            }

            @Override
            public void onRetry(int retryNo) {
                // called when request is retried
            }
        });
        return info[0];
    }

}
  • Вопрос задан
  • 610 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Нет желания разбираться в вашем коде. Возьмите Retrofit, он из коробки работает c Rx.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы