Ne pouvez pas faire référence statique non méthode statique ( Android getcontexteapplication() )
J'ai été stocker une variable globale qui est nécessaire pour l'ensemble des Activités dans mon application Android en utilisant une sous-classe de android.app.Application comme expliqué par Soonil (en Comment déclarer des variables globales dans Android?).
L'approche ressemble à ceci:
class MyApp extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
Jusqu'à ce point, cette approche a bien fonctionné pour accéder à la variable globale à partir de mes Activités. Mais aujourd'hui, en utilisant la même approche, j'ai obtenu l'erreur suivante:
Cannot make a static reference to the non-static method getApplicationContext()
from the type ContextWrapper
La principale différence avec avant, c'est que la nouvelle Activité est en réalité un Fragment (SherlockFragmentActivity, pour être précis).
Des idées pourquoi ne puis-je pas accéder à appState comme je l'ai avant, et est-il une bonne solution?
Merci beaucoup.
EDIT: Bonne prise, Matt B. Il s'avère que la place, je suis tout à fait d'appeler getcontexteapplication() est à l'intérieur d'une autre classe. Voici l'appel de point:
public class MyActivity extends SherlockFragmentActivity {
public static class AccountListFragment extends SherlockListFragment {
MyApp appState = ((MyApp)getApplicationContext());
...
}
...
}
Également, comme indiqué ci-dessous, l'erreur a disparu lorsque j'ai changé l'appel à
MyApp appState = ((MyApp)getActivity().getApplicationContext());
Application appState = ((Application)getApplicationContext());
dans mon SherlockFragmentActivity
et il compile très bien.Je ne vois pas où, dans cet exemple de code que vous tentez d'effectuer une référence statique à cette méthode. Êtes-vous sûr que vous avez posté la ligne correcte(s)?
pouvez-vous alors s'il vous plaît marquer la réponse comme correcte?
OriginalL'auteur gcl1 | 2012-06-01
Vous devez vous connecter pour publier un commentaire.
devrait fonctionner parfaitement.
Vous premier besoin d'une référence à l'activité, puis à l'application
La différence, c'est que vous êtes maintenant à l'appel de cette fonction à partir d'un Fragment (même si vous avez nommé "Activité") au lieu d'une Activité
"nouvelles Activité est en réalité un Fragment (SherlockFragmentActivity, pour être précis)." Je comprends qu'il a nommé son fragment "SherlockFragmentActivity"
Merci à vous, qui semble avoir effacé l'erreur! Pour être claire, savez-vous pourquoi ai-je besoin d'ajouter de la getActivity() dans ce cas (à partir de l'intérieur d'un SherlockFragmentActivity), mais pas auparavant (à partir de l'intérieur d'une Activité normale)?
Bien pour celui que vous nommez votre
Fragment
une Activité, qui est source de confusion. Vous ne devriez pas avoir le mot de l'Activité dans le nom d'une classe qui n'est pas d'avoir la classe de base deActivity
.Le fragment de code à partir d'un dépôt github (code.google.com/p/sherlock-demo/source/browse/...). J'ai aussi trouvé que l'utilisation du terme de l'Activité un peu déroutant, mais sinon, le code semble que ça marche 🙂 .
OriginalL'auteur vanleeuwenbram