可以啊。只要你有另一個類的實例,並且那個類的變數提供了類似set方法之類的,如果該變數是Public的,直接修改也可以。
⑵ Android中,如何在MainActivity中調用另外一個普通類中的某個方法里的某個變數
比如 public class Bean{
private String name="";
private static Bean bean;
public static Bean getInstance() {
if (bean == null) {
bean = new Bean();
}
return bean;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然後在MainActivity裡面把這個變數get出來
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String name=Bean. getInstance().getgetName();//這個name就是所求
}
}
⑶ android中可以調用方法中的變數嗎
在另一個類裡面給那個變數設置get 和set方法。一下均為手打,如有錯誤望指出 比如 public class Bean{ private String name=""; private static Bean bean; public static Bean getInstance() { if (bean == null) { bean = new Bean(); }
⑷ android使用全局變數.求解答@慈稅。
使用靜態類:
調用就不再寫了,直接使用類名.變數名就可以調用!
static修飾的靜態變數,使用很方便,在不同的類和包中都可以使用,在虛擬機中單獨佔用內存,沒錯,這些都是它們的優點,不過在項目上線後,才發現static有一些不太好的地方。
在查看項目的崩潰信息時,發現很多地方莫明的出現空指針異常的錯誤,經過排查,發現可能就是static的問題。我們在項目中,將用戶的信息也就是User對象保存成了一個靜態變數,而在報錯的地方,也都發現有使用過這種變數,因此,可以大致推斷出與這種保存的方式有一定的聯系。同時,有不少用戶反映在打開應用的情況下,接個電話或者長時間待機後,再回到應用也會出現崩潰的現象,而這些崩潰都與靜態變數的空指針有關系。
如此來說的話,static靜態修飾在Android的開發中是不是很危險?或許我們可以說如果是static User u = new User();這樣定義的話,那麼應該不會有太大問題,而如果是static User u;這樣定義的話,那麼很可以會出現NULL的現象。當然,前面的方法裡面的屬性也可能會現空的情況,但是這個可以用封裝來避免空指針。另外靜態常量還是很好用的。
那麼應該如何保存登錄或者全局的信息呢?根據Google官方的推薦以及網路到的各位大神的推薦,我們應該盡量使用繼承自Application的自定義類,在我們繼承的類中定義需要全局使用的變數,並通過getApplicationContext()來獲取和保存相關的變數即可。
2.使用Application
不過,為了讓我們的MyApplication取代android.app.Application的地位,在我們的代碼中生效,我們需要修改AndroidManifest.xml:
下面我們就可以在Activity或Service中靈活使用了:
而且按照Java及C#的種編輯思想的話,還是建議使用第二種試,這樣對於系統的安全是好的!而且我查了一些資料顯示,這樣也是符合Android這種思想的,因此建議使用第二種方式,設置公共變數!
Application是與應用同時存在的,也就是應用在它就在,並不會被GC給莫名其妙的回收掉,因此,使用此方法更加安全。
閱讀全文
⑸ Android 如何在其他類裡面獲得MainActivity類的實例,從而引用MainActivity類里的變數
1一般來說,這樣做是不好的.如果要這樣做,說明你的設計存在一定的問題.
首先從面向對象設計來說,不應該直接引用其他類的變數,而只應該通過類的方法來完成對類的操作.
此外因為Activity生命周期的管理是由android framework來實現的,你難以確切知道MainActivity的狀態,無法保證引用變數的有效性.
如果一定要這么做,你可以實現一個類似getInstance的靜態方法,不過注意不能像單例設計模式那樣,new 一個MainActivity,而是在onreate的時機給靜態變數instance賦值.
⑹ 如何調用android.mk 中的變數
變數
1
LOCAL_PATH := $(call my-dir)
1、解釋 LOCAL_PATH:
英文:如下圖
中文:Android.mk 開始必須定義變數 LOCAL_PATH,它用來指定源文件的位置
2、解釋 my-dir:
英文:如下圖
中文:編譯系統提供的'my-dir'宏函數,被用來獲取當前的目錄。
2
include $(CLEAR_VARS)
1、解釋 CLEAR_VARS:
英文:如下圖
中文:編譯系統提供CLEAR_VARS變數,它指向了一個用來清除 LOCAL_ 開頭的變數(LOCAL_PATH除外)的makefile文件,需要它的原因是整個的編譯上下文中,所有的變數都是全局的,這樣就可以保證這些變數只在局部范圍內起作用;
3
LOCAL_MODULE := hello-jni
1、解釋 LOCAL_MODULE:
英文:如下圖
中文:每一個android.mk文件中都必須定義一個模塊標示 LOCAL_MODULE , 這個名字必須是唯一的並且不包含任何的空格,編譯系統將自動的修改生成文件的前綴和後綴,如一個模塊為'foo'共享庫將被改為'libfoo.so';
重要提示,如果你的模塊名為'libfoo',編譯系統生成的文件為 'libfoo.so', 而不會去再增加前綴,當你使用的時候,android平台會自動識別;
4
LOCAL_SRC_FILES := hello-jni.c
1、解釋 LOCAL_SRC_FILES
英文:如下圖
中文:LOCAL_SRC_FILES必須包含一系列的C/C++源文件,他們將會被建立和裝載到模塊中,注意你不應該把需要包含的頭文件列在這里,因為建立系統將自動計算依賴項,只有源文件才能夠被編譯器識別;
2、解釋 LOCAL_CPP_EXTENSION
英文:如下圖
中文:注意默認的c++文件擴展名是'.cpp', LOCAL_CPP_EXTENSION可以用來指定不同類型的擴展名,不要忘了前面的點(如:'.cxx' 將起作用, 但是 'cxx'不會起作用).
如:LOCAL_CPP_EXTENSION := .cc .cpp
5
include $(BUILD_SHARED_LIBRARY)
1、解釋 BUILD_SHARED_LIBRARY
英文:如下圖
中文:『建立系統』提供個變數 BUILD_SHARED_LIBRARY, 將根據在『include』之前定義的所有的信息和LOCAL_前綴的變數,決定將建立什麼,如何正確的生成共享庫;
2、解釋 BUILD_STATIC_LIBRARY
英文: 如下圖
中文: 同上,只不過它生成的是靜態庫
6
LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/third_party/freetype
1、解釋 NDK_ROOT
中文:NDK_ROOT 代表的是ndk的根目錄,如我的是「D:\Android\android-ndk-r10」,這個例子是用來載入ndk根目錄下的freetype的頭文件路徑;
7
LOCAL_LDFLAGS := \
$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libfreetype.a
1、解釋 LOCAL_LDFLAGS
中文:用來載入用戶自己的靜態庫(.a文件)
2、解釋 TARGET_ARCH_ABI
中文:當前的cpu/abi的類型,在鏈接不同類型的CPU_ABI時非常有用,如下圖
8
$(call import-add-path,$(LOCAL_PATH)/libsrc)
1、解釋:import-add-path
中文:增加自己的路徑到 NDK_MODULE_PATH 環境變數中,再非ndk根目錄/sources下編譯時會用到
9
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp
$(error $(LOCAL_SRC_FILES))
1、解釋:$
中文:變數前面加上"$"用來返回變數的值
2、解釋:$(error string)
中文:用來將string所對應的內容列印到控制台,並且android.mk文件停止繼續進行編譯,如下圖
10
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp
$(warning $(LOCAL_SRC_FILES))
1、解釋:$(warning string)
中文:用來將string所對應的內容列印到控制台,並且android.mk文件將繼續進行編譯,如下圖
11
LOCAL_PRELINK_MODULE := false
1、解釋 LOCAL_PRELINK_MODULE:
中文:關閉編譯器鏈接前進行代碼優化,防止將沒有用到的代碼不添加到生成的庫中
12
LOCAL_EXPORT_CFLAGS := -DFOO=1
1、解釋 LOCAL_EXPORT_CFLAGS
定義這個變數來記錄一些列的 c/c++編譯標志,他們將會增加到其他的使用這個模塊的LOCAL_CFLAGS中,LOCAL_CFLAGS的功能相當於:LOCAL_STATIC_LIBRARIES 和 LOCAL_SHARED_LIBRARIES 這兩個變數;
13
LOCAL_STATIC_LIBRARIES := foo
1、解釋 LOCAL_STATIC_LIBRARIES
鏈接進來一個靜態庫的模塊,這里是靜態庫的模塊的名稱,而不是靜態庫的名稱
14
LOCAL_SHARED_LIBRARIES
鏈接進來一個動態庫的模塊,這里是動態庫的模塊的名稱,而不是靜態庫的名稱
15
LOCAL_EXPORT_CPPFLAGS
跟 LOCAL_EXPORT_CFLAGS 的功能一樣,但是它只能夠在c++中使用
16
LOCAL_EXPORT_C_INCLUDES
跟 LOCAL_EXPORT_CFLAGS,但是對於c的 include路徑,被調用模塊申明後,使用模塊可以很方便的使用包含的路徑
17
LOCAL_EXPORT_LDFLAGS
跟LOCAL_EXPORT_CFLAGS的作用一樣,但是僅僅是鏈接選項
18
LOCAL_EXPORT_LDLIBS
跟LOCAL_EXPORT_CFLAGS的作用類似,但是這個變數說明的系統庫,需要帶上 '-l' 前綴,他們將導入鏈接器選項,並追加到你的模塊的 LOCAL_LDLIBS
19
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
允許未定義的符號
20
LOCAL_CFLAGS
.c文件對應的編譯標記變數
21
LOCAL_LDLIBS
用來鏈接共享庫(so)或者執行文件,使用系統的庫文件的時候,需要加上前綴 '-l',例如下面的例子,將告訴連接器生成的模塊的時候同時鏈接 /system/lib/libz.so
LOCAL_LDLIBS := -lz
注意:如果你在一個模塊中鏈接一個靜態庫,這個靜態庫是不會起作用的,同時ndk-build 會列印出一條警告消息
22
LOCAL_CFLAGS := -fvisibility=hidden
隱藏庫函數名
23
LOCAL_PROGUARD_ENABLED默認是打開的,不特別指定的話,就是起作用的,就可能做優化。
LOCAL_PROGUARD_ENABLED:= disabled
⑺ Android 調用訪問類的函數
android調用訪問類的函數的方式,和java相同。
如果該類非靜態類,則需要聲明一個對象,然後初始化對象,對象.函數的方式調用函數。
如果該類是靜態類,則直接可以使用 類.函數 的方式,調用函數。
至於什麼是靜態類,非靜態類,只要看類名的前面是否有關鍵字static
⑻ android如何調用另一個類中的自定義的變數
你定義a為一個局部變數肯定是不行的,你可以將a聲明為一個私有的類的屬性如:private boolean a;然後在兩個方法里分別對其修改 這樣應該可以滿足你的需求了
⑼ android 全局變數怎麼使用
全局變數怎麼使用?說法太模糊了,如果你是要聲明一個全局變數,假設有一個類,你只要在類成員變數聲明即可,例如:我聲明一個int 類型的變數為10:private int number=10; 你可以在該類中方法內調用它(比如用來做加減乘除),也可以重新賦值給它(number=XX, XX必須是int類型,否則可能需要強轉)。
⑽ android同一個工程下不同java里的變數怎麼相互調用
一般不帶你這么直接調用的吧,你看看javaBean就知道了,為什麼javaBean裡面的屬性都是private的類型,外部調用的話需要統一一個set、get方法這樣保證數據的安全性
如果實在需要用的話你可以把a變數的數值放到request范圍里,然後你直接從request裡面取就行了
(如果上面的這些class類只是你寫著玩的,那就無所謂了,你直接寫死一個值好了,如果你的這個是web工程的話你可以使用上面的方法進行取值,可以通過context或者page或者request或者session等進行取值,這個scope定義域內的數據都是共享的)
如:application.setAttribute("A",a);
request.setAttribute("A",a);
session.setAttribute("A",a);
或者你把值放到集合裡面,把集合放到context、page、request、session里都可以
這個是在做項目的時候規范的用法
如果你怕麻煩也是寫著玩。要麼寫死值,要麼你實例化上面的那個類
GALLERYgal=newgallery();
inta=gal.a;//這個就是實例變數,是你通過gallery類實例化得來的,如果是靜態的變數或者靜態的方法也可以不用實例化直接調用變數即可