I have an activity that in onCreate() does the following:

1. Creates an empty ArrayList
2. Creates a new ArrayAdapter associated with the above ArrayList
3. Sets ListView to use the above ArrayAdapter
4. Uses Volley to send a GET request to my API to fetch some JSON data to load into the ListView

Once the data is fetched I add it to my ArrayList and the ListView is populated as expected

My problem is that when the activity is restarted (i.e. the screen is rotated via the emulator or the activity is restarted through Android Studio) the ListView no longer populates. 

I am not saving any state. I expect the activity to return to its initial default state so I don't think onSaveInstanceState() is the answer.

I've verified that the data is returned successfully from the API and that the adapter's hashcode is the same before and after the volley request and that it equals the ListView's set adapter. I've also verified that onDestroy() and then onCreate() are called when the activity is restarted so I know it is going through a full life cycle.

If I rotate the screen programmatically with setRequestedOrientation() I don't experience this issue. If I add items to my ArrayList outside of the GET request callback, I don't experience this issue.

Here is my activity onCreate()

```
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    //The data to be displayed
    descriptions = new ArrayList<>();
    listView = (ListView)this.findViewById(R.id.myListView);
    //Link 'descriptions' to the adapter
    adapter = new ArrayAdapter<>(this, R.layout.list_json_text_view, descriptions);
    listView.setAdapter(adapter);

    this.addTextFilter();
    this.addListViewClickListener();

    //See my ApiGetRequest class below
    request = new ApiGetRequest();
    request.send(this.getContext(), getDataUrl(), this, "", REQUEST_TYPES.TEXT);
}

```

And my activity GET request callback

```
public void onSuccess(DescriptiveJSONArray items, REQUEST_TYPES type) {

    descriptions.clear();
    try {
        for (int i = 0; i < items.length(); ++i) {
            JSONObject obj = items.getJSONObject(i);
            String desc = obj.optString("name", "") + " " + obj.optString("description", "");
            //TODO: Remove debug code
            System.out.println("Adding: "+desc);
            descriptions.add(desc);
        }
    }
    catch(JSONException e) {
        e.printStackTrace();
        //getJSONObject failed
    }
}

```

And my ApiGetRequest methods

```
    //My activity implements ApiGetCallback
    public void send(Context context, String url, ApiGetCallback callback, String tag, REQUEST_TYPES type) {
      StringRequest stringRequest = getStringRequest(url, callback, tag, type);
      //Singleton wrapper for RequestQueue
      AppRequestQueue queue = AppRequestQueue.getInstance(context);
      queue.add(stringRequest);
    }

    //Inner class inside ApiGetCallback
    class SuccessListener implements Response.Listener<String> {
      ApiGetCallback callback;
      REQUEST_TYPES type;

      public SuccessListener(ApiGetCallback callback, REQUEST_TYPES type) {
          this.callback = callback;
          this.type = type;
      }

      @Override
      public void onResponse(String response) {
          try {
              DescriptiveJSONArray jsonResp = new DescriptiveJSONArray(response);
              callback.onSuccess(jsonResp, type);
          }
          catch(JSONException e) {
              callback.onJsonException(e);
          }
      }
  } 

```

Any ideas what is happening?. I'm testing on Marshmallow and Nougat