Frage

Ich bekomme eine NullpointerException, die von einer Reihe meiner Benutzer aufgeworfen wird, und ich kann nicht erkennen, was das Problem ist, es wird auf diese Linie geworfen:

((Button)findViewById(R.id.speakEnglishButton)).setText("");

Ich kann nicht sehen.Benutzer in dieser Version.

Schauen Sie an der OnResume näher: generasacodicetagpre.

Im Wesentlichen ist alles, was ich tue, nach einem gespeicherten Präferenz boolean, und je nach Wert, abhängig von ihrem Wert, legte ich entweder Etiketten auf Schaltflächen ein oder setzen Sie sie in Leerzeichen ein.

Kann jemand bitte beraten?

danke

War es hilfreich?

Lösung

Do all of those ((Button)findViewById(R.id.speakEnglishButton)).setText(""); .... in onCreate()

Add

private Button mSpeakEngButton;
.....

As class variables, initialize them in onCreate()

public void onCreate() {

   ....
   mSpeakEngButton = ((Button)findViewById(R.id.speakEnglishButton));
}

Later in code you can modify their values as mSpeakEngButton.setWhatever()

Andere Tipps

I think the point is that when the user resumes the activity the layout is not set and thus a findViewById() has no 'anchor' to look for and thus returning null.

You may just move the call to setContentView() from onCreate to onResume (given that you are not referencing views in onCreate. For normal usage this makes no difference as in the Android lifecycle, onResumeis directly called after onCreate and before the user can interact with the activity.

Actually there is a bug in some applications where you visit an activity, then start a different one, perhaps leave the app for a different one, return and then return (via back button) to the first activity. Here all of a sudden you see a black screen. This is because the system "swapped" out the first activity and on returning only onResume is called, but not onCreate, so there is no chance to load the layout again there.

Most likely that's caused when

((Button)findViewById(R.id.speakEnglishButton));

returns null. This happens if such a resource cannot be found. Spontaneously one reason comes to my mind: You do not have default resources in your layout. That means: You must have at least one "default" layout, which applies for each language/orientation/... which should be placed in the folder "layout". Simply "layout".

If you keep setContentView() at onResume() instead of onCreate(), it will give inflate exception, I have tried this.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top