簡體   English   中英

全局變量傳遞不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM