2017-01-14 2 views
1

Мне нужно получить первую позицию, которую я получил, чтобы составить список и вызвать адаптер из 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?

Благодаря

ответ

0

Вы не звонили Subscriber.onError (Throwable е), созданный наблюдаемым Simpy не уведомляют об ошибках (Altough вы можете поймать их в блоке TRY).
При создании наблюдаемого вы должны вызвать метод Subscriber.onError (Throwable e), чтобы уведомить абонента об ошибках

Смежные вопросы