как преобразовать AsyncTask в RxAndroid

Я новичок в rxandroid, теперь я хочу использовать rxandroid для доступа в Интернет без использования AsyncTask, я написал код ниже

```

 Observable<String> o= Observable.create(new Observable.OnSubscribe<String>() {

       @Override
       public void call(Subscriber<? super String> sub) {
           sub.onNext("http://192.168.191.1/test3.html");//The test url in my computer ,it works ok;
       }
   });
    Subscriber<String> mySubscriber = new Subscriber<String>() {
        @Override
        public void onNext(String s) {
            InputStream in = null;
            try {
                in = new URL(s).openStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
            Reader r = null;
            try {
                r = new InputStreamReader(in, "utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            char[] buffer = new char[8000];
            try {
                r.read(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Log.d("AAA", new String(buffer));
        }

        @Override
        public void onCompleted() { }

        @Override
        public void onError(Throwable e) { }
    };
    o.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(mySubscriber);

```

Это не вызвало сбоев, но я не могу получить никакого результата, кто-нибудь знает, как это решить? Большое спасибо.


person jfxu    schedule 02.11.2015    source источник
comment
У вас есть выход? Попробуйте добавить ведение журнала, а также прочитайте это: stackoverflow.com/help/mcve. В текущем состоянии этого вопроса трудно догадаться, где ваша ошибка.   -  person Jaap    schedule 02.11.2015


Ответы (1)


Не похоже, что вы на самом деле что-то делаете со своими результатами или обновляете свой пользовательский интерфейс, что может привести к тому, что вы не увидите никаких результатов. Композиция вашего кода RX выглядит довольно прилично, поэтому я думаю, что именно поэтому.

С тех пор Rx-Android в значительной степени был преобразован в RX-Binding, поэтому вам следует использовать его вместо этого.

Я просто работал над этим сам, чтобы заполнить список результатами из моего интерфейса отдыха:

Требуется замена AsyncTask с помощью RXJava

То, что вы делаете, выглядит хорошо, но вы можете упростить его

person Will Evers    schedule 02.11.2015
comment
Спасибо, я сделал несколько тестов, кажется, что after in = new URL(s).openStream(); поток останавливается, после этого я ничего не могу сделать - person jfxu; 02.11.2015