Pointeur Null dans getcontexteapplication()
J'essaie le morceau de code suivant, où un service est la mise en œuvre de mon auditeur:
public class MyListenerClass extends Service implements MyListenerInterface {
public void onCurrencyRecieved(MyEventClass event) {
System.out.println("Coins Recieved - Listener Successful");
stopSelf();
Toast toast = Toast.makeText(getApplicationContext(), "Service Stopped", Toast.LENGTH_LONG);
toast.show();
}
@Override
public void onCreate() {
Toast toast = Toast.makeText(getApplicationContext(),"Service started", Toast.LENGTH_LONG);
toast.show();
super.onCreate();
}
Maintenant, le toast à l'intérieur onCreate() fonctionne très bien, mais qu'à l'intérieur de la méthode de remplacement est de lancer l'exception suivante:
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): java.lang.NullPointerException
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.test.listenertest1.MyListenerClass.onCurrencyRecieved(MyListenerClass.java:28)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.test.listenertest1.MyEventGenerator.generateEvent(MyEventGenerator.java:34)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.test.listenertest1.MyEventGenerator.<init>(MyEventGenerator.java:16)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.test.listenertest1.NewActivity.onKeyDown(NewActivity.java:33)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.view.KeyEvent.dispatch(KeyEvent.java:1037)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.app.Activity.dispatchKeyEvent(Activity.java:2046)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1631)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2368)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2338)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.view.ViewRoot.handleMessage(ViewRoot.java:1641)
01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.os.Handler.dispatchMessage(Handler.java:99)
Je suppose que je suis en manque quelques java importants concept. Cant nous utilisons getcontexteapplication() à l'intérieur d'une méthode surchargée ?
Selon le manuel de l' (developer.android.com/reference/android/app/Service.html), vous devez être en mesure de le faire. Ce qui est à l'intérieur de
Rien n'est à l'intérieur de stopself(). Le Service continue de fonctionner jusqu'à ce que stopself() est appelée
stopSelf()
?Rien n'est à l'intérieur de stopself(). Le Service continue de fonctionner jusqu'à ce que stopself() est appelée
OriginalL'auteur Saurabh Verma | 2012-01-03
Vous devez vous connecter pour publier un commentaire.
Vous devriez essayer d'éviter d'utiliser
getApplicationContext()
autant que possible, ce qui permettra d'augmenter fortement les chances d'obtenir de la Force de Ferme.Au lieu d'utiliser
YourClass.this
, dans ce casMyListenerClass.this
.Je suppose que dans cet exemple, il ne fonctionne pas, parce que
getApplicationContext()
est appelé aprèsstopSelf()
getApplicationContext()
augmenter la chance d'obtenir une Force de fermeture?Par exemple, si vous appelez cela dans un surchargée OnClick Méthode il peut - en fonction de l'appareil/firmware/sdk - crash. Ou voir le code ci-dessus: si
this
a été utilisé, il ne serait pas jeter l'Exception.J'ai essayé d'utiliser MyListenerClass.et même supprimé stopself(). Il est encore de s'écraser donnant le même journal. D'ailleurs, je ne vois rien dans les logs qui suggère que c'est un firmware crash
Avez-vous remplacer
onCurrencyRecieved
? Parce que dans le code ci-dessus, vous n'avez pas.onCurrencyRecieved est ma méthode d'écouteur
OriginalL'auteur Force
Pas sûr si vous pouvez, comme cela semble être à l'intérieur d'un service, mais si cela fonctionne dans
onCreate
(et ce chemin de code est en fait appelée), vous pouvez facilement sauvegarder le contexte d'une variable locale dansonCreate
et puis plus tard, les utiliser dans votre méthode.OriginalL'auteur Heiko Rupp
Toasts ne peut être ajoutée à l'Activité comme contexte.
OriginalL'auteur Dawid Drozd
Avez-vous déclaré comme un nouveau processus , dans ce cas, vous pourriez obtenir à l'exception de pointeur null
Dans le contexte de Processus getcontexteapplication() ne fonctionnera pas .
Vous pouvez le vérifier l'logcat si TID et le PID de l'Activité et de service sont les mêmes.
OriginalL'auteur Arulselvan Munuswamy
Essayer de donner
MyListenerClass.this
ouYourActivity.this
par exemple.
OriginalL'auteur Pratik Pitale
Vous avez à créer un contexte pour l'activité et transmettre ce contexte.
c'est vraiment de travailler pour moi.
OriginalL'auteur Ashish Tikarye