【发布时间】:2018-03-22 13:21:34
【问题描述】:
我在仅在 android oreo 中保存和检索单例类中的值时遇到问题。我有一个包含 4 个片段的活动。第一个片段显示产品列表。每当用户选择该产品时,我都会将该产品保存在单例类变量中.现在,当我尝试在第二个片段中检索此值时。它显示空指针异常。 我在 onStop() 中存储值并在 onResume() 中检索值。 下面是我在 orderList 中存储订单的 fragmentProduct 的 onStop 方法
片段产品
public void onStop()
{
super.onStop();
Log.d("stop","called");
globalProvider.shangpingListDefault.clear();
if(MiTems!=null) {
for(int i=0;i<MiTems.size();i++){
for(int a=0;a<MiTems.get(i).size();a++){
globalProvider.shangpingListDefault.add(MiTems.get(i).get(a));
}
}
}
List<OrderSubmit> orderList=new ArrayList<OrderSubmit>();
this.shangPingList=globalProvider.shangpingList;
List<Contract> contractList=globalProvider.contractListToCart;
for (int i = 0; i < globalProvider.contractListToCart.size(); i++) {
//globalProvider.orders.add(new OrderSubmit());
OrderSubmit order = new OrderSubmit();
order.products = new ArrayList<Product>();
//Contract contract=globalProvider.contractListToCart.get(i);
for (int a = 0; a < globalProvider.shangpingList.size(); a++) {
Product product = globalProvider.shangpingList.get(a);
if (globalProvider.contractListToCart.get(i)._supplier.equals(product.get_supplier())) {
order.products.add(product);
}
}
orderList.add(order);
Log.d("orderlist","orderadded");
}
下面是我在 onResume 中检索订单的 FragmentCart 的 OnResumeMethod
片段购物车
public void onResume()
{
super.onResume();
orders=globalProvider.orders;
Log.d("checksizeorder",globalProvider.orders.size()+"");
setSelect();
}
In MainActivity,whenever tab is selected I am replacing these fragment: MainActivity
public void setSelect(int i){
FragmentManager fm=getFragmentManager();
FragmentTransaction transaction=fm.beginTransaction();
//hide(transaction);
switch(i){
case 0:
if(globalProvider.singal==0){
return;
}
globalProvider.singal=0;
FragmentContract fragment_contract = new FragmentContract();
transaction.replace(R.id.main, fragment_contract);
shangping_Img.setImageResource(R.drawable.shangping_pressed);
cart_Img.setImageResource(R.drawable.cart);
dingdan_Img.setImageResource(R.drawable.dingdan);
wode_Img.setImageResource(R.drawable.my_info);
one.setTextColor(0xffee2400);
two.setTextColor(0xff666666);
three.setTextColor(0xff666666);
four.setTextColor(0xff666666);
break;
case 1:
if(globalProvider.singal==1){
return;
}
globalProvider.singal=1;
FragmentCart cart_fragment=new FragmentCart();
transaction.replace(R.id.main, cart_fragment);
shangping_Img.setImageResource(R.drawable.shangping);
cart_Img.setImageResource(R.drawable.cart_pressed);
dingdan_Img.setImageResource(R.drawable.dingdan);
wode_Img.setImageResource(R.drawable.my_info);
one.setTextColor(0xff666666);
two.setTextColor(0xffee2400);
three.setTextColor(0xff666666);
four.setTextColor(0xff666666);
break;
【问题讨论】:
-
如果您发布一些代码会有所帮助。快速注意,如果您正在显示另一个片段,除非您实际销毁它,否则不会调用片段的 onStop。当片段变得不可见时,您可以考虑保存该值。
-
@MoGa :已更新。请看,每当我移动到另一个片段时,都会调用我的 onStop 方法,因为我检查了记录器。
-
onPause 是 onResume 的倒数 - 换句话说,您可以在没有 onStop 的情况下进入 onResume。
-
@Andy 我也尝试过在 onPause 中保存价值。它没有用
-
我意识到的是,新片段的onResume方法在onStop之前被调用
标签: android singleton android-8.0-oreo