Я не могу обмотать голову вокруг этого, возможно, из-за отсутствия моего опыта. У меня есть изображения на сервере, я получаю их путь в JSON вместе с описанием и именем. Я получаю все эти данные с Volley.Использование volley и Glide для загрузки, отображения и кеширования изображений
private static final String TAG = "StoreActivity";
private RecyclerView shopsRecyclerView;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Store> stores;
private StoreAdapter storeAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_store);
shopsRecyclerView = (RecyclerView) findViewById(R.id.shopsRecyclerView);
shopsRecyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
shopsRecyclerView.setLayoutManager(layoutManager);
stores = new ArrayList<>();
storeAdapter = new StoreAdapter(getApplicationContext(), stores);
shopsRecyclerView.addOnItemTouchListener(new StoreAdapter.RecyclerTouchListener(getApplicationContext(), shopsRecyclerView, new StoreAdapter.ClickListener() {
@Override
public void onClick(View view, int position) {
Intent i = new Intent(StoreActivity.this, ProductsActivity.class);
startActivity(i);
}
@Override
public void onLongClick(View view, int position) {
}
}));
fetchStores();
}
private void fetchStores() {
JsonObjectRequest fetchAllStores = new JsonObjectRequest(Request.Method.POST, API.GET_STORES, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "Fetch Stores: " + response);
showStores(response);
shopsRecyclerView.setAdapter(storeAdapter);
storeAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Fetch Stores Error: " + error.getMessage());
}
});
ApplicationController.getInstance().addToRequestQueue(fetchAllStores);
}
private void showStores(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("images");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Store store = new Store();
store.setId(jsonObject.getString("id"));
store.setImage_url(jsonObject.getString("url"));
store.setTitle(jsonObject.getString("name"));
stores.add(store);
}
} catch (JSONException e) {
Log.d(TAG, "Show Stores: " + e.getMessage());
}
}
Тогда я положил, что путь/URL я получил от Volley в Glide и загрузить все изображения в RecyclerView.
@Override
public void onBindViewHolder(StoreViewHolder holder, final int position) {
Store store = stores.get(position);
holder.tvDescription.setText(store.getTitle());
Glide.with(context)
.load(store.getImage_url())
.placeholder(android.R.drawable.ic_menu_upload_you_tube)
.error(android.R.drawable.stat_notify_error)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.ivImage);
}
В следующий раз активируй свою операцию, этот запрос будет отправлен еще раз и изображения будут загружены раз в день? Или они каким-то образом кэшируются, и они загружаются из кеша? Когда я выключаю интернет и включаю одно и то же действие, ничего не происходит, потому что запрос на залп не может быть отправлен, и изображения, которые, как я думал, были кешированы, не отображаются. Что было бы лучшим подходом к моей проблеме? В принципе, мне нужно получить путь к изображениям с сервера и поместить их в мой recyclerview, но я также хочу, чтобы они были кэшированы, чтобы они не загружались каждый раз.
Эй, я уже использовал Glide, но я какой-то образом получить изображения с сервера, и именно поэтому я использую залп. Остальное - в моем вопросе. :) – jlively
вы хотите получить изображения? если да, то вам нужно сохранить изображения на сервер, тогда вам нужно будет получить ссылки на изображения. вы можете использовать Retrofit вместо volley. –
Дарпан, я уже все это сделал. То, что я хочу знать, это то, что изображения, полученные волейболом, а затем показаны в изображениях с Glide, кэшируются? В следующий раз, когда я запустил приложение, Glide загрузит кешированные изображения или дождитесь, пока залп снова их заберет? Я также хотел бы знать, каковы наилучшие методы для этого. – jlively