in my Android app i have to do a lot of http requests, so I decided to try rx java to do that!
This is how im doing it now, but is there a better solution than just use a for loop? Sometimes it can be possible that I have about 30 urls in a row!
Can someone link an example how to do this the right way?
public class MainActivity extends AppCompatActivity {
private Subscription subscription;
private TextView tvCard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvCard = (TextView) findViewById(R.id.tvCards);
tvCard.setMovementMethod(new ScrollingMovementMethod());
for(int i =0;i<=20;i++){
subscription = observableCardByUrl("https://blabla.com")
.subscribeOn(Schedulers.io()) should be done
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Types>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.e(TAG, e.getMessage(), e);
}
@Override
public void onNext(Types types) {
tvCard.append(types.String + "\n");
}
});
}
}
public Observable<Types> observableCardByUrl(final String url) {
return Observable.defer(new Func0<Observable<Types>>() {
@Override
public Observable<Types> call() {
try {
return Observable.just(getCard(url));
} catch (IOException e) {
return null;
}
}
});
}
@Nullable
private Types getCard(String url) throws IOException {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Response response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
Types types = new Gson().fromJson(response.body().charStream(), Types.class);
return types;
}
return null;
}
}
Based on snipped that you provided, it would be better to use
Also I would suggest to use Retrofit with rxjava adapter and take a look into this if you want to make parallel calls.