Есть приложение, которое обращается к файлу json, который лежит на хостинге, чтоб получить список радиостанций. Если я добавлю в файл json какую либо информацию, например еще одну радиостанцию там пропишу, то в приложении не обновляются данные, а всё отображается по старому.
Новая радиостанция отображается только если зайти в настройки телефона,а далее в настройки приложения, и руками очистить кеш и данные у приложения. Тогда снова зайдя в приложение, - оно загрузит заново файл json и отобразит мне обновленный список с радиостанциями.
Как сделать так, чтоб кеш либо чистился при выходе из приложения, либо обновлять данные с файла json при каком либо событии, например зашел в другое активити - вернулся обратно и всё обновилось.
p.s: файл json лежит на хостинге у ucoz., но думаю это не из за этого.
p.p.s: проверил с другим хостингом., всё работает как надо!. в чем проблема у юкоза? по FTP также заливаю file.json , но не обновляет список в приложении, при изменении файла и перезаливке его обратно на юкоз...
Например, я цепляю на снекбар слушатель кнопки:
Snackbar.make(parentPanel, "TEST", Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.refresh_list, new View.OnClickListener() {
@Override
public void onClick(View v) {
Здесь нужно каким то образом реализовать перезагрузку файла .json, чтобы он заново загрузился в приложение.
Либо зачистить кеш приложения (незнаю возможно ли это, не получив при этом краш приложения какой нибудь...
}
}).show();
Здесь как я понимаю парсится json:
public class UtilFunctions {
static String LOG_CLASS = "UtilFunctions";
/**
* Check if service is running or not
* @param serviceName
* @param context
* @return
*/
public static boolean isServiceRunning(String serviceName, Context context) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for(RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if(serviceName.equals(service.service.getClassName())) {
return true;
}
}
return false;
}
public static ArrayList<Track.TrackDetails> getSongsList(){
ArrayList<Track.TrackDetails> mArrTrackList = new ArrayList<Track.TrackDetails>();
if(PlayerConstants.SONGS_LIST!=null)
{
for (int i = 0; i < PlayerConstants.SONGS_LIST.size(); i++) {
if (PlayerConstants.SONGS_LIST.get(i).getGenre().equalsIgnoreCase(PlayerConstants.CATEGORY)) {
mArrTrackList.add(PlayerConstants.SONGS_LIST.get(i));
}
}
}
return mArrTrackList;
}
/**
* Read the songs present in external storage
* @param context
* @return
*/
public static Track jsonParesing(Context context,String response) {
// TODO Auto-generated method stub
Track mObjTrack = new Track();
ArrayList<Track.TrackDetails> mArrAllTrackDetails = new ArrayList<Track.TrackDetails>();
try {
response = URLDecoder.decode(URLEncoder.encode(response, "iso8859-1"),"UTF-8");
JSONArray jsonArray = new JSONArray(response);
for (int i = 0; i < jsonArray.length(); i++) {
Track.TrackDetails trackDetails = new Track.TrackDetails();
JSONObject jsonObject = jsonArray.getJSONObject(i);
trackDetails.setId(jsonObject.getString(context.getString(R.string.key_id)));
trackDetails.setTitle(jsonObject.getString(context.getString(R.string.key_title)));
trackDetails.setUser_id(jsonObject.getString(context.getString(R.string.key_user_id)));
trackDetails.setLabel_name(jsonObject.getString(context.getString(R.string.key_label_name)));
trackDetails.setGenre(jsonObject.getString(context.getString(R.string.key_genre)));
trackDetails.setDescription(jsonObject.getString(context.getString(R.string.key_description)));
trackDetails.setDownloadable(jsonObject.getBoolean(context.getString(R.string.key_downloadable)));
trackDetails.setStreamable(jsonObject.getBoolean(context.getString(R.string.key_streamable)));
if (jsonObject.getString(context.getString(R.string.key_tag_list)) != null) {
trackDetails.setTag_list(jsonObject.getString(context.getString(R.string.key_tag_list)));
}
if (jsonObject.getString(context.getString(R.string.key_duration)) != null) {
trackDetails.setDuration(jsonObject.getString(context.getString(R.string.key_duration)));
}
if (jsonObject.getString(context.getString(R.string.key_created_at)) != null) {
trackDetails.setCreated_at(jsonObject.getString(context.getString(R.string.key_created_at)));
}
if (jsonObject.getString(context.getString(R.string.key_permalink_url)) != null) {
trackDetails.setPermalink_url(jsonObject.getString(context.getString(R.string.key_permalink_url)));
}
if (jsonObject.getString(context.getString(R.string.key_artwork_url)) != null) {
trackDetails.setArtwork_url(jsonObject.getString(context.getString(R.string.key_artwork_url)));
}
if (jsonObject.getString(context.getString(R.string.key_stream_url)) != null) {
trackDetails.setStream_url(jsonObject.getString(context.getString(R.string.key_stream_url)));
}
if (!jsonObject.isNull(context.getString(R.string.key_download_url))) {
if (jsonObject.getString(context.getString(R.string.key_download_url)) != null) {
trackDetails.setDownload_url(jsonObject.getString(context.getString(R.string.key_download_url)));
}
}
mArrAllTrackDetails.add(trackDetails);
}
mObjTrack.setTrackDetails(mArrAllTrackDetails);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("myLog", response);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
PlayerConstants.OBJ_TRACK = mObjTrack;
return mObjTrack;
}
/**
* Get the album image from albumId
* @param context
* @param album_id
* @return
*/
public static Bitmap getAlbumart(Context context,Long album_id){
Bitmap bm = null;
BitmapFactory.Options options = new BitmapFactory.Options();
try{
final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);
ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
if (pfd != null){
FileDescriptor fd = pfd.getFileDescriptor();
bm = BitmapFactory.decodeFileDescriptor(fd, null, options);
pfd = null;
fd = null;
}
} catch(Error ee){}
catch (Exception e) {}
return bm;
}
/**
* @param context
* @return
*/
/**
* Convert milliseconds into time hh:mm:ss
* @param milliseconds
* @return time in String
*/
public static String getDuration(long milliseconds) {
long sec = (milliseconds / 1000) % 60;
long min = (milliseconds / (60 * 1000))%60;
long hour = milliseconds / (60 * 60 * 1000);
String s = (sec < 10) ? "0" + sec : "" + sec;
String m = (min < 10) ? "0" + min : "" + min;
String h = "" + hour;
String time = "";
if(hour > 0) {
time = h + ":" + m + ":" + s;
} else {
time = m + ":" + s;
}
return time;
}
public static boolean currentVersionSupportBigNotification() {
int sdkVersion = android.os.Build.VERSION.SDK_INT;
if(sdkVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN){
return true;
}
return false;
}
public static boolean currentVersionSupportLockScreenControls() {
int sdkVersion = android.os.Build.VERSION.SDK_INT;
if(sdkVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH){
return true;
}
return false;
}
}
и в главном Activity:
private String getRequest() {
// TODO Auto-generated method stub
String tag_json_obj = "json_obj_req";
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest sr = new StringRequest(Request.Method.GET, Config.URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
StrResponse = response.toString();
Log.d(TAG, "StrResponse : " + StrResponse);
mObjTrack=UtilFunctions.jsonParesing(getApplicationContext(),StrResponse);
mArrAllTrackDetails = mObjTrack.getTrackDetails();
setUpCategoryList();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e(TAG, "Error: " + error.getMessage());
}
});
DiskBasedCache cache = new DiskBasedCache(getCacheDir(), 16 * 1024 * 1024);
queue = new RequestQueue(cache, new BasicNetwork(new HurlStack()));
queue.start();
// clear all volley caches.
queue.add(new ClearCacheRequest(cache, null));
// Adding request to request queue
AppController.getInstance().addToRequestQueue(sr, tag_json_obj);
return StrResponse;
}
private void setUpCategoryList() {
// TODO Auto-generated method stub
//displayMusicPlayerControl();
textView_title.setVisibility(View.VISIBLE);
listView_Category.setVisibility(View.VISIBLE);
// Remove Duplicate
ArrayList<String> tempArrCategory = new ArrayList<String>();
if (mArrAllTrackDetails != null) {
tempArrCategory.clear();
for (int i = 0; i < mArrAllTrackDetails.size(); i++) {
tempArrCategory.add(mArrAllTrackDetails.get(i).getGenre());
}
}
ArrayList<Category> category = new ArrayList<Category>();
if (tempArrCategory != null) {
// add elements to tempArrCategory, including duplicates
HashSet<String> hs = new HashSet<String>();
hs.addAll(tempArrCategory);
mArrCategory.clear();
mArrCategory.addAll(hs);
Category category1;
for(int i =0;i<mArrCategory.size();i++)
{
category1 = new Category();
category1.setCategory(mArrCategory.get(i));
for (int j = 0; j < mArrAllTrackDetails.size(); j++) {
if(mArrAllTrackDetails.get(j).getGenre().equalsIgnoreCase(category1.getCategory()))
{
category1.setIcon(mArrAllTrackDetails.get(j).getArtwork_url());
}
}
category.add(category1);
}
}
if (mArrCategory != null) {
// Log.d(TAG, "mArrCategory.size() : " + mArrCategory.size());
GridLayoutManager gridLayoutManagerVertical =
new GridLayoutManager(this,
mColumns, //The number of Columns in the grid
LinearLayoutManager.VERTICAL,
false);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
listView_Category.setHasFixedSize(true);
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
listView_Category.setLayoutManager(gridLayoutManagerVertical);
listView_Category.setItemAnimator(new DefaultItemAnimator());
listView_Category.setAdapter(new CategoryAdapter(category));
}
displayMusicPlayerControl();
}
Что-то вроде такого:
req.setRequestHeader("Cache-Control", "max-age=0, no-cache, no-store");
req.setRequestHeader("Pragma", "no-cache");
У Volley можно ручками инвалидировать кеш для запроса:
AppController.getInstance().getRequestQueue().getCache().invalidate(url, true);
или так:
AppController.getInstance().getRequestQueue().getCache().remove(url);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не могу понять, как правильно сделать навигацию на вью через спрингВроде сделал все четко по этому примеру http://vaadin
Имеется база данных содержащая столбец с названиямиКаким образом можно вывести данные из БД в массив, а потом из этого массива заполнить...
Имеется схема БД (Упрощаю) в которой есть две таблицы назовем их Накладная и Товары_НакладнойНа клиенте (JavaFX) у меня два TableView Master и Detail
В общем, я написал программу и при проверке эмулятором - она работаетВ ней есть два Activity, с кнопками