답변:
기본 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.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;
}
}
그런 다음 언제든지 커스텀 Application 객체에서 싱글 톤을 호출 할 수 있습니다.
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 내에서 종속성 주입을 제공합니다. Dagger 라고 합니다. 여기서 사용하는 방법에 대해서는 다루지 않겠지 만, 그런 종류의 것이 필요하다면 매우 매끄 럽습니다.
나는 당신이 원하는 것을 어떻게 할 수 있는지에 관해 충분히 자세하게 설명하기를 바랍니다.
이것처럼 해보십시오 :
공유 데이터 클래스를 작성하십시오.
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();
이 블로그에서 전체 예제를 찾으십시오. Global Variables
// 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을 사용하십시오.
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
정적으로 사용 getInstance()
되는 반면 다른 사람들은 그렇지 않습니다. 그에 따라 upvoted.