Мне нужно получить первую позицию, которую я получил, чтобы составить список и вызвать адаптер из recyclerView. Поэтому я решил реализовать наблюдаемый и я делаю это:Не удалось получить позицию в этом наблюдаемом
private void getLocation() {
Observable.create(new Observable.OnSubscribe<Location>()
{
LocationManager mLocationManager;
public void call(final Subscriber<? super Location> subscriber)
{
final LocationListener listener = new LocationListener()
{
@Override
public void onLocationChanged(Location location)
{
if (location != null)
{
Log.v("Location Changed", location.getLatitude() + " and " + location.getLongitude());
subscriber.onNext(location);
try
{
mLocationManager.removeUpdates(this);
}
catch (SecurityException e)
{
e.printStackTrace();
}
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
mLocationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
try
{
Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(location != null && location.getTime() > Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000)
{
subscriber.onNext(location);
}
else
{
Looper.prepare();
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
}
}
catch (SecurityException e)
{
e.printStackTrace();
}
}
}).subscribeOn(Schedulers.newThread())
.subscribe(new Subscriber<Location>()
{
@Override
public void onCompleted()
{
adapter = new AirportAdapter(getActivity(), airps,nearby);
recyclerView.setAdapter(adapter);
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Location location)
{
Log.d("lat",String.valueOf(location));
getNearbyAirports(location);
}
});
}
private void getNearbyAirports(Location location)
{
nearby = new RealmList<>();
double currLatitude = location.getLatitude();
double currLongitude = location.getLongitude();
for(Airport aobj : airps)
{
if((aobj.getLatitudeDeg() >= (currLatitude - 0.5))&&
(aobj.getLatitudeDeg() <= (currLatitude + 0.5))&&
(aobj.getLongitudeDeg() >= (currLongitude - 0.5))&&
(aobj.getLongitudeDeg() <= (currLatitude + 0.5)))
{
nearby.add(aobj);
}
}
Log.d("nearby",String.valueOf(nearby.size()));
}
проблема заключается в том, что я не получаю сообщение об ошибке, он реализует только recyclerView с пустыми пунктами.
Возможно, это проблема наблюдения? или Looper?
Благодаря