回答:
基本android.app.Application
クラスを拡張して、次のようにメンバー変数を追加できます。
public class MyApplication extends Application {
private String someVariable;
public String getSomeVariable() {
return someVariable;
}
public void setSomeVariable(String someVariable) {
this.someVariable = someVariable;
}
}
Androidマニフェストで、android.app.Applicationを実装するクラスを宣言する必要があります(android:name=".MyApplication"
既存のアプリケーションタグに属性を追加します)。
<application
android:name=".MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name">
次に、アクティビティで変数を取得して設定できます。
// set
((MyApplication) this.getApplication()).setSomeVariable("foo");
// get
String s = ((MyApplication) this.getApplication()).getSomeVariable();
あなたはSingleton Pattern
このようなものを使うことができます:
package com.ramps;
public class MyProperties {
private static MyProperties mInstance= null;
public int someValueIWantToKeep;
protected MyProperties(){}
public static synchronized MyProperties getInstance() {
if(null == mInstance){
mInstance = new MyProperties();
}
return mInstance;
}
}
アプリケーションでは、次の方法でシングルトンにアクセスできます。
MyProperties.getInstance().someValueIWantToKeep
このグローバル変数は私のプロジェクトで機能します:
public class Global {
public static int ivar1, ivar2;
public static String svar1, svar2;
public static int[] myarray1 = new int[10];
}
// How to use other or many activity
Global.ivar1 = 10;
int i = Global.ivar1;
アプリケーション設定を使用できます。Contextオブジェクトを渡す限り、アクティビティやコードからアクセスでき、それらを使用するアプリケーションにプライベートであるため、ルーティングされたものを処理しない限り、アプリケーション固有の値の公開について心配する必要はありません。デバイス。それでも、ハッシュまたは暗号化スキームを使用して値を保存できます。また、これらの設定は、アプリケーションの実行から次の実行まで保存されます。 以下に、いくつかのコード例を示します。
あなたが求めているものを達成することができるいくつかの異なる方法があります。
1.)アプリケーションクラスを拡張し、コントローラーとモデルオブジェクトをそこでインスタンス化します。
public class FavoriteColorsApplication extends Application {
private static FavoriteColorsApplication application;
private FavoriteColorsService service;
public FavoriteColorsApplication getInstance() {
return application;
}
@Override
public void onCreate() {
super.onCreate();
application = this;
application.initialize();
}
private void initialize() {
service = new FavoriteColorsService();
}
public FavoriteColorsService getService() {
return service;
}
}
その後、いつでもカスタムアプリケーションオブジェクトからシングルトンを呼び出すことができます。
public class FavoriteColorsActivity extends Activity {
private FavoriteColorsService service = null;
private ArrayAdapter<String> adapter;
private List<String> favoriteColors = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favorite_colors);
service = ((FavoriteColorsApplication) getApplication()).getService();
favoriteColors = service.findAllColors();
ListView lv = (ListView) findViewById(R.id.favoriteColorsListView);
adapter = new ArrayAdapter<String>(this, R.layout.favorite_colors_list_item,
favoriteColors);
lv.setAdapter(adapter);
}
2.)コントローラーにそれ自体のシングルトンインスタンスを作成させるだけです。
public class Controller {
private static final String TAG = "Controller";
private static sController sController;
private Dao mDao;
private Controller() {
mDao = new Dao();
}
public static Controller create() {
if (sController == null) {
sController = new Controller();
}
return sController;
}
}
次に、アクティビティまたはフラグメントからcreateメソッドを呼び出すだけで、存在しない場合は新しいコントローラーが作成されます。それ以外の場合は、既存のコントローラーが返されます。
3.)最後に、Squareで作成された洗練されたフレームワークがあり、Android内に依存性注入を提供します。それはダガーと呼ばれています。ここではその使用方法については触れませんが、そのようなものが必要な場合は非常に洗練されています。
あなたが望んでいることをどのように行うことができるかに関して十分な詳細を提供したことを願っています。
このようにしてみてください:
共有データクラスを作成します。
SharedData.java
import android.app.Application;
/**
* Created by kundan on 6/23/2015.
*/
public class Globals {
private static Globals instance = new Globals();
// Getter-Setters
public static Globals getInstance() {
return instance;
}
public static void setInstance(Globals instance) {
Globals.instance = instance;
}
private String notification_index;
private Globals() {
}
public String getValue() {
return notification_index;
}
public void setValue(String notification_index) {
this.notification_index = notification_index;
}
}
データを設定/取得するクラスで、クラスのインスタンスをグローバルに宣言/開始します(onCreate()
メソッドの前にこのコードを使用):-
Globals sharedData = Globals.getInstance();
データを設定:
sharedData.setValue("kundan");
データを取得:
String n = sharedData.getValue();
あなたはGlobal Class
このようなものを作成することができます:
public class GlobalClass extends Application{
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String aName) {
name = aName;
}
public String getEmail() {
return email;
}
public void setEmail(String aEmail) {
email = aEmail;
}
}
次に、マニフェストで定義します。
<application
android:name="com.example.globalvariable.GlobalClass" ....
これで、次のように値をグローバル変数に設定できます。
final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
globalVariable.setName("Android Example context variable");
これらの値は次のようにして取得できます。
final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
final String name = globalVariable.getName();
このブログのグローバル変数から完全な例を見つけてください
// My Class Global Variables Save File Global.Java
public class Global {
public static int myVi;
public static String myVs;
}
// How to used on many Activity
Global.myVi = 12;
Global.myVs = "my number";
........
........
........
int i;
int s;
i = Global.myVi;
s = Global.myVs + " is " + Global.myVi;
私は同様の答えをチェックしましたが、ここで与えられたものは私のニーズに合いません。私の見解では、あなたが探しているものを見つけました。私がセキュリティについて知らないので、唯一の可能なブラックポイントはセキュリティ問題(または多分そうではない)です。
インターフェイスを使用することをお勧めします(コンストラクターでClassを使用する必要はないなど)。
public interface ActivityClass {
public static final String MYSTRING_1 = "STRING";
public static final int MYINT_1 = 1;
}
次に、以下を使用してクラス内のどこにでもアクセスできます。
int myInt = ActivityClass.MYINT_1;
String myString = ActivityClass.MYSTRING_1;
技術的にはこれは質問の答えにはなりませんが、グローバル変数の代わりにRoomデータベースを使用することをお勧めします。 https://developer.android.com/topic/libraries/architecture/room.html グローバル変数を格納する必要があるだけで、大したことではなく、何でもない場合でも、Roomデータベースを使用するのが最もエレガントです、ネイティブで十分にサポートされ、アクティビティのライフサイクルの周りで値を維持する方法。多くの問題、特にデータの整合性を防止するのに役立ちます。データベースとグローバル変数が異なることを理解していますが、コードのメンテナンス、アプリの安定性、データの整合性のためにRoomを使用してください。
可能であれば、ガベージコレクターまたはOSによるアンロードによってファイル.soでクリアされていない、生き続けるために必要な変数を宣言する必要があります。これを行うには、C / C ++でコーディングし、.so libファイルにコンパイルして、 MainActivityにロードします。
static
変数と同じです。
import android.app.Application;
public class Globals extends Application
{
private static Globals instance = null;
private static int RecentCompaignID;
private static int EmailClick;
private static String LoginPassword;
static String loginMemberID;
private static String CompaignName = "";
private static int listget=0;
//MailingDetails
private static String FromEmailadd="";
private static String FromName="";
private static String ReplyEmailAdd="";
private static String CompaignSubject="";
private static int TempId=0;
private static int ListIds=0;
private static String HTMLContent="";
@Override
public void onCreate()
{
super.onCreate();
instance = this;
}
public static Globals getInstance()
{
return instance;
}
public void setRecentCompaignID(int objRecentCompaignID)
{
RecentCompaignID = objRecentCompaignID;
}
public int getRecentCompaignID()
{
return RecentCompaignID;
}
public void setLoginMemberID(String objloginMemberID)
{
loginMemberID = objloginMemberID;
}
public String getLoginMemberID()
{
return loginMemberID;
}
public void setLoginMemberPassword(String objLoginPassword)
{
LoginPassword = objLoginPassword;
}
public String getLoginMemberPassword()
{
return LoginPassword;
}
public void setEmailclick(int id)
{
EmailClick = id;
}
public int getEmailClick()
{
return EmailClick;
}
public void setCompaignName(String objCompaignName)
{
CompaignName=objCompaignName;
}
public String getCompaignName()
{
return CompaignName;
}
public void setlistgetvalue(int objlistget)
{
listget=objlistget;
}
public int getlistvalue()
{
return listget;
}
public void setCompaignSubject(String objCompaignSubject)
{
CompaignSubject=objCompaignSubject;
}
public String getCompaignSubject()
{
return CompaignSubject;
}
public void setHTMLContent(String objHTMLContent)
{
HTMLContent=objHTMLContent;
}
public String getHTMLContent()
{
return HTMLContent;
}
public void setListIds(int objListIds)
{
ListIds=objListIds;
}
public int getListIds()
{
return ListIds;
}
public void setReplyEmailAdd(String objReplyEmailAdd)
{
ReplyEmailAdd=objReplyEmailAdd;
}
public String getReplyEmailAdd()
{
return ReplyEmailAdd;
}
public void setFromName(String objFromName)
{
FromName=objFromName;
}
public String getFromName()
{
return FromName;
}
public void setFromEmailadd(String objFromEmailadd)
{
FromEmailadd=objFromEmailadd;
}
public String getFromEmailadd()
{
return FromEmailadd;
}
}
簡単!!!!
アクセスしたい変数をグローバル変数として、静的変数として宣言できます。そして今、あなたはこれらを使用してこれらの変数にアクセスできます
classname.variablename;
public class MyProperties {
private static MyProperties mInstance= null;
static int someValueIWantToKeep;
protected MyProperties(){}
public static synchronized MyProperties getInstance(){
if(null == mInstance){
mInstance = new MyProperties();
}
return mInstance;
}
}
MyProperites.someValueIWantToKeep;
それでおしまい!;)
synchronized
は静的(iirc)で正しく使用されているのgetInstance()
に対し、他では使用されていないことがわかります。それに応じて賛成票を投じた。