Die Verwendung Von Globalen Variablen
Ich weiß, diese Frage wurde gebeten, eine million mal, weil ich habe einige der Forschung getan und haben festgestellt, viele Fäden auf. Ich habe versucht, die Antworten in solchen threads, aber ich habe ein wenig Mühe.
Ich bin auf der Suche, um ein paar Variablen, die ich verwenden kann, über alle meine Aktivitäten.
Erstellte ich ein GlobalVariables.java Klasse, die sieht wie folgt aus (der Wert ist nur für Testzwecke, wie der jetzt):
import android.app.Application;
public class GlobalVariables extends Application {
int holeAmount;
public int getHoles(){
return holeAmount;
}
public void setHoles(String s){
holeAmount = 30;
}
}
in meiner Haupttätigkeit, wo alles passiert, habe ich noch Folgendes:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GlobalVariables global = ((GlobalVariables)getApplicationContext());
int totalHoles = global.getHoles();
und auf die "GlobalVariables global = ..." - Zeile, erhalte ich die folgende Fehlermeldung:
Multiple markers at this line
- GlobalVariables cannot be resolved
to a type
- GlobalVariables cannot be resolved
to a type
Ich habe versucht, Folgen den Anweisungen hier, aber klar, ich mache etwas falsch. > Wie deklarieren Sie Globale Variablen in Android?
Jede Hilfe wäre sehr geschätzt werden!
Dank!
ZWEITER VERSUCH:
EasyPar.java (Fehler @ EasyParHelperActivity)
package com.movi.easypar;
import java.text.DateFormat;
import java.util.Date;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
public class EasyPar extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
(initialize all my buttons and textviews)
}
public void someMethod() {
EasyParHelperActivity.helper.setHoles(30);
int holes = EasyParHelperActivity.helper.getHoles();
}
(the rest of my button functions, etc.)
EasyParHelperActivity (Keine Fehler)
package com.movi.easypar;
import android.app.Application;
public class EasyParHelperActivity extends Application {
public static EasyParHelper helper = new EasyParHelper();
}
EasyParHelper.java (Keine Fehler)
package com.movi.easypar;
public class EasyParHelper {
private int holeAmount = 0;
public int getHoles() {
return holeAmount;
}
public void setHoles(int holes) {
holeAmount = holes;
}
}
Alles was ich will ist für die Benutzer werden in der Lage, auf eine Schaltfläche klicken, "18" oder "9" auf dem ersten Bildschirm, und für die Anwendung in der Lage sein diesen Wert verwenden, zu anderen Zeiten während, was auch immer es tut. Also ich brauche, um es in Bildschirm 1 und Bildschirm 2, die ich abrufen müssen, Wert.
erfolgt (die Namen wurden ein wenig verändert.. aber im Grunde sollte alles gleich sein.)
Ich bin wirklich Leid, Rob, ich ging durch den code 4 mal und ich kann das problem aber nicht finden 🙁
Mir entweder, wirklich frustrierend für eine neue person wie mich. Nur ich verstehe nicht, warum es nicht sehen 🙁
InformationsquelleAutor Rob | 2011-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie ein "helper" - Klasse wie folgt...
Dann für Ihre Anwendung, Klasse Folgendes tun...
Zugriff auf die get/set-Methoden in der Helfer können Sie einfach anrufen...
Meine main-Klasse erweitert Aktivität, ist, dass das ein problem? Auch wenn ich erstellt eine neue Klasse (Rechtsklick auf mein Paket > neue > Klasse) und machen die MyAppHelper, und versuchen, es zu ändern, um geschützt, wirft es eine Fehlermeldung besagt, dass Illegale Modifizierer für die Klasse EasyParHelper; nur öffentliche, abstrakte & final sind zulässig
Mein bad - die helper-Klasse sollte public sein nicht geschützt ist, werde ich Bearbeiten. Nein, es spielt keine Rolle, dass deine main-Klasse erweitert Aktivität. Nur stellen Sie sicher, dass beide Ihre erweiterte Anwendung und Ihre Aktivität sind in der gleichen Paket und Sie müssen nicht einmal importieren Sie die Application-Klasse. Ich benutze "Helfer" regelmäßig und das ist, wie ich es mache.
Kein Glück... sicherstellen, dass wir auf der gleichen Seite.. der eine Datei src > com.meine.Anwendung > MainApplication.java und die andere ist die src - > com.meine.Anwendung > MyAppHelper.java dann in MyAppHelper ich habe Ihre top-box von code und in MainApplication.java ich habe die öffentliche Klasse MainApplication erstreckt Aktivität implementiert OnClickListener { public static MyAppHelper helper = new MyAppHelper(); (und dann den rest des Inhalts) wenn dies der Fall ist, noch bekomme ich die folgende Fehlermeldung: MyAppHelper nicht gelöst werden kann, um eine Art
Ich fügte auch die folgende, die das manifest <application android:name=".MyAppHelper" android:icon="@drawable/ic_main" android:label="@string/app_name">
InformationsquelleAutor Squonk
Müssen Sie es importieren GlobalVariables. Auch müssen Sie den vollständigen Klassennamen der GlobalVariables in Anwendung name-Attribut in der manifest-wie hier beschrieben:
http://developer.android.com/guide/topics/manifest/application-element.html#nm
Ist es im gleichen Paket? Ich empfehle, um zu schließen und öffnen Sie das Projekt in Eclipse (oder aktualisieren). Manchmal einige Kompilierungs-Fehler könnte kommen aus bad eclipse aktualisiert.
Wenn ich versuche, fügen Sie es in die Liste importieren, auch wenn ich hinzufügen import com.meine.- Anwendung.GlobalVariables; es sagt Den import com.meine.Anwendung.GlobalVariables nicht gelöst werden kann. Ist das, weil seine Ausweitung der Anwendung anstelle der Aktivität, durch Zufall?
NÖ. Sie müssen Kompilierungsfehler in GlobalVariables. Und BTW - nennen Sie es anders - Ende ist es mit der Anwendung (MyApplication, GlobalVariablesApplication) oder smth.... Dies ist die Konvention verwendet
kein Fehler im GlobalVariables.java scheint zu kompilieren, gut 🙁 MainApplication.java obwohl, wo ich bin immer der Fehler. Es scheint einfach nicht in der Lage, um zu sehen, GlobalVariables.java aus irgendeinem Grund
InformationsquelleAutor Jarek Potiuk
First things First...
Sollten Sie intensiv prüfen, ob und warum müssen Sie möglicherweise eine Globale variable. Globale Variablen sollten nur verwendet werden, als eine Letzte resort. Darüber hinaus, wenn Sie am Ende brauchen, um die Globale variable(N), die Sie dokumentieren müssen, Sie zu Tode, denn Sie machen keinen Fehler, wenn die app bekommt komplexe, verlieren Sie die Spur von einer oder mehreren von Ihnen. Tracking Sie nieder, ist eine schwere PIA!!!
Es ist meine Erfahrung, dass fast 99% der Zeit, die Globale Variablen benutzt werden, ist es, weil der Programmierer Faulheit und was auch immer Sie versuchen zu erreichen, hätte getan werden in einer Weise verwendet, die Programmierung best practices.
Hier ist ein Beispiel:
https://groups.google.com/forum/#!Thema/android-Entwickler/yfI89IElhs8
Ohne zu wissen, mehr über das, was Sie versuchen, ist der pass zwischen den Klassen kann ich nicht bieten jede andere Ratschläge, andere als das, was ich habe. Aber ich bin ziemlich POSITIV, dass Sie das erreichen, was Sie suchen, ohne Verwendung von globalen Variablen.
Dann würde ich definitley empfehlen die Verwendung von string resource file. Zum Beispiel verwende ich SharedPreferences und für den Schlüssel in der Schlüssel/Wert-paar verwende ich eine string-Ressource, weil es Global verfügbar ist. Somit würde es so Aussehen.mSharPref.getInt(dies.getString(R. string.somevalue), 0);
btw, während alle anderen Antworten sind möglich, ich denke, wenn Sie gehen den Weg der Verwendung der string-prefs für diese, werden Sie finden, dass es WEISE einfacher und WEISE leichter zu pflegen. Es hat auch den Vorteil, dass Android seine Arbeit machen und Sie dir tun... wie z.B. der Objekt-Erstellung/ - Freigabe.
InformationsquelleAutor rf43
Was ist, wenn Sie
Von docs es ist nicht klar, Sie erhalten aktuelle application-Objekt aus
getApplicationContext()
oder eine andere Umsetzung. Und aus dem code ist es definitiv nicht so erscheinen.Für Ihre Zwecke, aber Sie wollen, um Ihre
Application
Objekt, das würde IhreGlobalVariables
. Und stellen Sie sicher, dass es ordnungsgemäß registriert und in die manifest.Auch nur, um sicherzustellen, dass Sie haben
Anfang
GlobalVariables
, nicht wahr? Sehe es nicht in deinem snippet.InformationsquelleAutor Alex Gitelman
Was ich habe, und das hat für mich einfach erstellen Sie eine öffentliche Klasse und initialisieren Sie es mit dem Kontext aus welcher Klasse aufgerufen hatte. Ich fand das bei diese link. Diese tatsächlich lassen Sie mich erhalten Sie Zugriff auf Dinge wie die system-Dienste. Ich ging dann vor und definiert einige Klassen-Variablen, mit denen mir call-in und außerhalb der Klasse. Aber tatsächlich Griff die Speicherung der Variablen, die ich angestellt SharedPrefrences.
Das schöne an diesem setup war, dass ich nicht zu halten Einstellung, bis Sie den code für die gemeinsamen prefrences, bevor ich zugegriffen einzelnen Variablen. Ich habe es nur durch die öffentlichkeit Klasse.
Jetzt halten Sie im Verstand, ich bin ein völliger Neuling auf diesem Zeug, und ich bin mir nicht sicher, dass dies der beste Ansatz, oder selbst wenn dies geschehen sollte, in dieser Art und Weise überhaupt. Aber ich beschlossen, zu teilen, was ich getan habe, alle gleich. So hier einige code:
Oben ist die aktuelle Globale Klasse. Dies nicht im manifest deklariert werden, oder irgendetwas.
Dann Zugriff auf die Variablen in dieser Klasse würde ich etwas code, wie dies in einer Aktivität:
Und den Zugriff auf die Variablen wie diese:
oder diese...
InformationsquelleAutor snatr