Есть сайт, получаю с него 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];
}
}