Ответ 1
Кажется, что в комментариях было много ответов, но я попытаюсь осветить остальные, или, вернее, я попытаюсь ответить на ваши конкретные вопросы.
1) Volley не обрабатывает перенаправление самостоятельно. Он обрабатывается базовым HttpStack. Например, в настоящее время я использую OkHttp (из Square) в качестве моего HTTP-клиента для Volley. См. https://plus.google.com/108284392618554783657/posts/eJJxhkTQ4yU. https://gist.github.com/JakeWharton/5616899 OkHttp замечательный, поскольку он имеет отличные настройки по умолчанию для обработки SPDY, перенаправления и других удобств HTTP. Вы также можете использовать это, чтобы реализовать свои собственные значения по умолчанию для платформы HttpUrlConnection (вызывая followRedirects() в соединении перед тем, как передать его Volley, например, https://developer.android.com/reference/java/net/HttpURLConnection.html#setFollowRedirects(boolean))
2) Я даже не уверен, что буду использовать getCacheDir() для кэша Volley. Согласно документам (https://developer.android.com/reference/android/content/Context.html#getCacheDir()), этот каталог кеша никогда не должен превышать 1 мб. Принимая во внимание, что большинство клиентов обычно используют 10 мб по умолчанию для кеша http (1 мб действительно мал для кэша Http!!). Кроме того, почему вы используете такой глубокий каталог кеша? Нет причин, по которым "cacheDir1" должен быть кратным множеством каталогов. Просто сделайте это имя файла. getCacheDir() всегда будет возвращать вашу собственную папку. Я бы рекомендовал это сделать при инициализации Volley (обычно рекомендуемым местом является класс Application):
File volleyCacheFile = new File(getExternalCacheDir(), "volleyCache.tmp");
Конечно, в этом отсутствует обработка ошибок (что, если внешнее хранилище недоступно?). Кроме того, не забывайте, что вам нужно соответствующее разрешение для записи внешнего хранилища.
Надеюсь, что это поможет.