Это аналогичный вопрос, но разница в том, что я использую cache
в моем Listview.
Я пытаюсь создать событие фильтра в моем Listview, где есть spinner
и когда они выбирают на счетчике автоматически обновляется список данных c, но проблема, которую я получаю, заключается в том, что при выборе счетчика список не обновляется, он обновляется только при использовании функции swipe refre sh , но как мне сделать это обновление без использования Swipe Refre sh?
вот мой текущий код:
вот моя функция запроса
public void loadDeals(String branch){
HashMap<String, String> user = user_branch.getBranches();
branches = user.get("branch_id");
finalBranch = branch;
if (finalBranch == null){
finalBranch = branches;
}else{
finalBranch = branch;
}
final Constant WebConfig = new Constant();
queue = Volley.newRequestQueue(getContext());
CustomRequest stringRequest = new CustomRequest(Request.Method.POST, WebConfig.deals_filter, null, new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response)
{
try {
JSONArray details = response.getJSONArray("data");
dealsList.clear();
HashMap<String, String> user = user_branch.getBranches();
branches = user.get("branch_id");
for (int i=0; i<details.length(); i++) {
JSONObject object = details.getJSONObject(i);
dealsList.add(new DealsModel(
object.getInt("id"),
object.getString("a"),
object.getString("b"),
object.getString("c"),
object.getInt("d"),
object.getString("e")
));
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
loading.setVisibility(View.GONE);
dealsRecyclerView.setVisibility(View.VISIBLE);
cons.setVisibility(View.VISIBLE);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map < String, String > getParams() throws AuthFailureError {
Map < String, String > params = new HashMap < > ();
Log.d("current_branch",finalBranch);
params.put("people_id", "1");
params.put("place_id", finalBranch);
return params;
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
Cache.Entry cacheEntry = HttpHeaderParser.parseCacheHeaders(response);
if (cacheEntry == null) {
cacheEntry = new Cache.Entry();
}
final long cacheHitButRefreshed = 3 * 60 * 1000; // in 3 minutes cache will be hit, but also refreshed on background
final long cacheExpired = 24 * 60 * 60 * 1000; // in 24 hours this cache entry expires completely
long now = System.currentTimeMillis();
final long softExpire = now + cacheHitButRefreshed;
final long ttl = now + cacheExpired;
cacheEntry.data = response.data;
cacheEntry.softTtl = softExpire;
cacheEntry.ttl = ttl;
String headerValue;
headerValue = response.headers.get("Date");
if (headerValue != null) {
cacheEntry.serverDate = HttpHeaderParser.parseDateAsEpoch(headerValue);
}
headerValue = response.headers.get("Last-Modified");
if (headerValue != null) {
cacheEntry.lastModified = HttpHeaderParser.parseDateAsEpoch(headerValue);
}
cacheEntry.responseHeaders = response.headers;
final String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString), cacheEntry);
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException e) {
return Response.error(new ParseError(e));
}
}
@Override
protected void deliverResponse(JSONObject response) {
super.deliverResponse(response);
}
@Override
public void deliverError(VolleyError error) {
super.deliverError(error);
}
@Override
protected VolleyError parseNetworkError(VolleyError volleyError) {
return super.parseNetworkError(volleyError);
}
};
queue.add(stringRequest);
}
и это код для счетчика
spinnerDeals.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
branch_name = spinnerDeals.getItemAtPosition(spinnerDeals.getSelectedItemPosition()).toString();
if (branch_name.equals("All Branches")) {
branch_name = "All";
}
if (branch_name.equals("a")) {
branch_name = "1";
}
if (branch_name.equals("b")) {
branch_name = "2";
}
if (branch_name.equals("c")) {
branch_name = "3";
}
Log.d("branch", branch_name);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
// DO Nothing here
}
});
Я думаю, у меня возникла эта проблема из-за кеша.
Любая помощь будет очень признательна, большое спасибо!