gpt4 book ai didi

java - 全局变量在按下后丢失的 ApplicationContext

转载 作者:行者123 更新时间:2023-12-01 09:16:13 26 4
gpt4 key购买 nike

我在一个名为 Controller 的全局类中声明的全局变量有一个小问题,该全局类是从应用程序扩展的。

当我启动 Activity A 时,我在 Controller 中有一个包含 0 个项目的数组列表(它是一个购物车),我继续 Activity B,单击后,我将一个项目添加到“ Controller ”,然后返回(使用后退按钮)在 Activity A 上,我得到的数组列表仍然为 0 个项目,出了什么问题?

我的 Controller 类:

public class Controller extends Application {

public static final int SIGNUP_REQUEST = 98; // The request code
public static final int SIGNIN_REQUEST = 99;
private User mUser;// Instance de l'utilisateur connecté
private Cart mCart = new Cart(); // Panier
private Tracker mTracker; // Analytics
private Session mSession;
private SessionModule mSessionModule;

@Override
public void onCreate() {
super.onCreate();

}

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
mSessionModule = new SessionModule(base);
mSession = mSessionModule.getSession();
}

public Cart getCart() {

return mCart;
}

public Session getSession() {
return mSession;
}

public User getUser() {
return mUser;
}

public void setUser(User mUser) {
this.mUser = mUser;
}
}

我的购物车类别:

public class Cart {
private ArrayList<Item> items i= new ArrayList<Item>();
private Store mStore;

public Item getItem(int pPosition) {

return items.get(pPosition);
}

public void addItem(Item item) {
items.add(item);
}

public void removeItem(int pPosition) {
items.remove(pPosition);
}

public void clear() {
items.clear();
}

public int size() {
return items.size();
}

public ArrayList<Item> getItems() {

return items;

}
}

在 onCreate() 中获取 Controller 实例的 BaseActivity :

public abstract class BaseActivity extends AppCompatActivity {
public Session mSession;
public Controller mController;

public static final int SIGNUP_REQUEST = 98; // The request code
public static final int SIGNIN_REQUEST = 99;

public static final int LOGIN_REQUEST = 1; // The request code
public static final int REGISTER_REQUEST = 2; // The request code

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mController=(Controller)getApplicationContext();

mSession=mController.getSession();

}

onResume() 中调用的 MainActivity 扩展 BaseActivity (Activity A) 上,我有一个刷新 UI 徽章的方法:

 public void checkCartItems(){
if(itemCart!=null){
LayerDrawable iconCart = (LayerDrawable) itemCart.getIcon();
int nb_items=mController.getCart().size();
Tools.setBadgeCount(this, iconCart,String.valueOf(nb_items));
}

}

在 Activity B 上扩展 OnClick() 上的 BaseActivity 时,我调用一个简单的添加:

mController.getCart().addItem(mItem);

最佳答案

创建您的ApplicationSingleton。像这样:

public class Controller extends Application {

public static final int SIGNUP_REQUEST = 98; // The request code
public static final int SIGNIN_REQUEST = 99;
private User mUser;// Instance de l'utilisateur connecté
private Cart mCart = new Cart(); // Panier
private Tracker mTracker; // Analytics
private Session mSession;
private SessionModule mSessionModule;
private static Controller _mInstance;

@Override
public void onCreate() {
super.onCreate();
_mInstance = this;

}

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
mSessionModule = new SessionModule(base);
mSession = mSessionModule.getSession();
}

public static synchronized Controller getInstance() {
return _mInstance;
}

public Cart getCart() {

return mCart;
}

public Session getSession() {
return mSession;
}

public User getUser() {
return mUser;
}

public void setUser(User mUser) {
this.mUser = mUser;
}
}

然后在使用 Application 类时,使用 Controller.getInstance().getCart().addItem(mItem);

关于java - 全局变量在按下后丢失的 ApplicationContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40529185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com