[英]Global variables not passing properly
我創建了一個包含通用變量和函數的類,並由與我的應用程序中的不同UI頁面進行交互的活動類繼承。 我一直在使用getVariable()
和setVariable(input
)函數在類和活動之間傳遞信息。 突然,我無法再以這種方式傳遞信息(直到最近的編輯,它一直運行良好,現在我無法弄清楚是哪個更改造成了這種麻煩)。 我已經使用Log輸出來確定數據是否正確存儲-使用setVariable(input)
函數-但是稍后使用getVariable()
函數調用時,它將返回null。 有什么想法嗎?
*請注意,我最近開始將片段合並到我的項目中,在我的主類上擴展了FragmentActivity而不是Activity。 我認為這不是問題的根源,但是可以嗎? 如果可以,傳遞全局變量信息並使用片段的最佳實踐是什么?
代碼示例:
主要繼承的類:
public class MenuBarActivity extends FragmentActivity {
private String keyA;
private String keyB;
private int token;
private String Salt;
private long expires;
public String getKeyB() {
return keyB;
}
public String getKeyA() {
return keyA;
}
public int getTokenID() {
return token;
}
public void setToken(int tkn) {
token = tkn;
}
public void setKeyB(String kyB) {
keyB = kyB;
}
public void setKeyA(String kyA) {
keyA = kyA;
}
//Other common functions
}
登錄活動類(獲取來自Web的登錄信息,存儲到全局變量中):
public class WebContentGet extends MenuBarActivity{
public int tryLogOn(String uEmail, String pw) {
//call to get new keys on start up
JSONObject jObSend = new JSONObject();
try {
jObSend.put("email", uEmail);
jObSend.put("password", pw);
t.start();
t.join();
if(getStatus() == USER_STATUS_SUCCESSFULLOGIN){
String data = getData();
JSONObject jObReturn = new JSONObject(data);
String kyA = jObReturn.getString("keyA");
String kyB = jObReturn.getString("keyB");
int tkn = Integer.parseInt(jObReturn.getString("tokenID"));
String salt = jObReturn.getString("salt");
long exp = Long.parseLong(jObReturn.getString("expiration"));
int uID = Integer.parseInt(jObReturn.getString("userID"));
// Log outputs confirm data being read properly, and reported to setX() functions
setToken(tkn);
setKeyA(kyA);
setKeyB(kyB);
setSalt(salt);
setExpires(exp);
Log.d("WebContentGet tryLogIn","login values stored");
}
return getStatus();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return getStatus();
}
}
活動類,檢查是否存儲了keyA / B / etc:
public class UserLogIn2 extends MenuBarActivity implements EmailListener {
String emailIn;
String pwIn;
Context context = this;
@Override
public void onEmailLogInClick(String email, String pw) {
Log.d("UserLogin2", "onEmailLogInClick");
emailIn = email;
pwIn = pw;
emailIn = emailIn.trim();
emailIn = emailIn.toUpperCase();
Log.d("prepped email", emailIn);
pwIn = pwIn.trim();
WebContentGet webOb = new WebContentGet();
int webLog = webOb.tryLogOn(emailIn, pwIn);
if (webLog == USER_STATUS_SUCCESSFULLOGIN) {
int tkn = getTokenID();
long exp = getExpires();
String kya = getKeyA();
String kyb = getKeyB();
String slt = getSalt();
Log.d("UserLogIn2 - token", String.valueOf(tkn));
//Log statements confirm that getX() functions returning null
session.storeLoginSession(emailIn, pwIn, thisUser, tkn, exp, kya, kyb, slt);
Intent intent1 = new Intent(context, MainActivitiy.class);
startActivity(intent1);
} else {
showDialog(this, "Log in failure", "Incorrect Password");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.userlogin2);
}
}
這是行不通的,因為您有兩個不同的MenuBarActivity實例。 這也不是將數據從一個活動傳遞到android中另一個活動的方法。
如果要在另一個活動中使用來自一個活動的數據,則必須將它們添加到提供數據的活動的意圖中,然后在另一個活動中提取它們。 有關更多信息,請參見此處: 如何在Android應用程序的“活動”之間傳遞數據?
如果您不想啟動活動並按意圖發送數據,則必須將數據存儲在某個位置,例如SharedPreferences並再次獲取它們: 如何在Android中使用SharedPreferences來存儲,獲取和編輯值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.