使用onSaveInstanceState防止第二次网络调用

时间:2015-03-10 17:20:33

标签: android instancestate

在我的OnCreate方法中,我正在进行网络调用并使用结果填充列表视图。我将结果保存在ArrayList中,并使用ArrayList填充listview。如果用户按下后退按钮并重新进入活动,我想将ArrayLists存储在SavedInstanceState Bundle中,并使用存储的ArrayLists填充ListView,而不是第二次进行网络调用。以下是我的OnCreate代码:

      if (savedInstanceState != null) {

      largeImage = savedInstanceState.getParcelableArrayList("Image");
      flowercode = savedInstanceState.getStringArrayList("Code");
      flowerprice = savedInstanceState.getStringArrayList("Price");
      flowerdimensions = savedInstanceState.getStringArrayList("Dimension");
      largeImageText = savedInstanceState.getStringArrayList("Imagetext");

        ListView listView = (ListView) findViewById(R.id.LowRomance);
        FlowerShopAdapter listAdapter = new FlowerShopAdapter(this, flowercode, flowerName, flowerprice, largeImage, flowerdimensions);
        listView.setAdapter(listAdapter);

    } else if(savedInstanceState == null) {

            makesoapcall();

        }
    }

这是我的OnSaveInstanceState代码

   public void onSaveInstanceState(Bundle savedInstanceState) {
   savedInstanceState.putParcelableArrayList("Image", largeImage);
   savedInstanceState.putStringArrayList("Code", flowercode);
   savedInstanceState.putStringArrayList("Price", flowerprice);
   savedInstanceState.putStringArrayList("Dimension", flowerdimensions);

   super.onSaveInstanceState(savedInstanceState);

   }

目前我的应用程序每次都在进行网络通话。他们需要实现的其他东西是为了让它能够正常工作,还是我现在试图实现这个错误?当我将它们放入savedInstanceState时,ArrayList绝对不是null。

1 个答案:

答案 0 :(得分:0)

在活动上按下后退按钮时,不应该调用

onSaveInstanceState()。当Android决定销毁活动时调用它。

e.g。当方向改变时。

您需要的是SharedPreferences。使用ArrayLists中的SharedPreferences存储onStop()。并在onStart()中获取。 Here是如何在SharedPreferences中存储ArrayList。