2016-01-07 1 views
0

J'ai exactement les mêmes méthodes et appelle onRefresh() et onRestart(), mais pour une raison quelconque onRestart() fait ce que je veux exactement, mais onRefresh() actes différemment. Ce que je veux arriver, c'est que l'application comprenne quand l'emplacement est désactivé en cours d'exécution. OnRestart() a ceci: Je démarre l'application, j'obtiens les données de prévision, je désactive l'emplacement de la barre d'état, j'appuie sur le bouton d'accueil et j'ouvre à nouveau l'application. Comme prévu, onRestart() essaie de vérifier l'état du GPS (avec gpsTracker.getIsGPSEnabled()), voit que l'emplacement est désactivé et envoie le message Toast correspondant. OnRefresh() a ceci: Je démarre l'application, j'obtiens les données de prévision, je désactive l'emplacement de la barre d'état, et même j'attends quelques secondes, puis j'actualise l'application. De manière inattendue, onRefresh() donne le toast "Data Refreshed", même s'il obtient "null, null" comme latitude et longitude.onRestart() et onRefresh() Agir différemment avec le même code

Je pourrais aussi fournir d'autres codes, mais s'il y avait un problème avec le reste du code, pourquoi onRestart() agirait comme je le souhaite? Je ne reçois aucune erreur. Toute aide serait très appréciée. Merci.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ButterKnife.bind(this); 
    final GPSTracker gpsTracker = new GPSTracker(this); 


    mSwipeRefreshLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE, Color.CYAN); 
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        mSwipeRefreshLayout.setRefreshing(false); 
        if (gpsTracker.getIsGPSTrackingEnabled()) { 
         gpsTracker.getLocation(); 
         getForecast(gpsTracker); 
         Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show(); 
        } 
       } 
      }, 3000); 
     } 
    }); 
} 

@Override 
protected void onRestart() { 
    super.onRestart(); 
    final GPSTracker gpsTracker = new GPSTracker(this); 
    new Handler().postDelayed (new Runnable() 
     @Override public void run() { 
      gpsTracker.getLocation(); 
      if (gpsTracker.getIsGPSTrackingEnabled()) { 
       getForecast(gpsTracker); 
       Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show(); 
      } 
     } 
}, 3000); 
} 
+0

avez-vous la permission pour l'application d'accéder à l'emplacement? '' – ImDeveloping

+0

@ImDeveloping Oui, je n'ai aucun problème à obtenir les prévisions pour l'emplacement actuel. –

Répondre

1
  @Override 
      public void onRefresh() { 
      final GPSTracker gpsTracker = new GPSTracker(MainActivity.this); 
      new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       mSwipeRefreshLayout.setRefreshing(false); 
       if (gpsTracker.getIsGPSTrackingEnabled()) { 
        gpsTracker.getLocation(); 
        getForecast(gpsTracker); 
        Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }, 3000); 
    } 
}); 
+0

Cela a résolu cela.J'ai totalement manqué que :(Merci beaucoup. –

1

OnRestart vous créez une nouvelle instance de GPSTracker. essayez de mettre à jour votre gestionnaire GPSTracker dans onRefresh. Faites un essai

+0

Qui l'a résolu. J'ai totalement raté cela :(Merci beaucoup –