Я очень новичок в Android. В моем приложении у меня есть API для отдыха, который содержит информацию о пользователях компании. Например, имя, адрес электронной почты, телефон и т. д. Я также реализую изображение с этой информацией. Список изображений исходит из URL-адреса. Я использую библиотеку изображений Glide, чтобы показать эти изображения. Теперь проблема в том, что я использовал эту строку .diskCacheStrategy( DiskCacheStrategy.ALL) для кэширования изображения на устройстве. Он всегда показывает предыдущее сохраненное изображение. Я пробовал также с Пикассо. Но когда пользователь делает новую фотографию, изображение не обновляется. Поэтому пишу следующее.
.skipMemoryCache( true )
.diskCacheStrategy( DiskCacheStrategy.NONE )
Теперь новая проблема, когда пользователь переходит в автономный режим, в представлении изображений нет изображения. Я хотел бы сохранить обновленное изображение и показать его в recyclerview, даже когда пользователь не в сети. Я пишу так много статей о переполнении стека из прошлого. Но подходящего ответа на это не нашел.
У меня есть адаптер Glide для реализации следующим образом
Glide.with( holder.itemView.getContext() )
.load( Constants.HTTP.PHOTO_URL + currentColleague.getMail() )
.skipMemoryCache( true )
.diskCacheStrategy( DiskCacheStrategy.NONE )
.signature( new StringSignature( String.valueOf(Constants.HTTP.PHOTO_URL + currentColleague.getMail() ) ) )
.into( holder.colleaguePicture );
Есть ли способ сохранить изображение с URL-адреса и показать в reyclerview.
Может быть, это не связано, но я дал для понимания класса активности
public class MyColleaguesPage extends AppCompatActivity implements MyColleaguesAdapter.ColleagueListListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_layout);
if (getNetworkAvailability()) {
rq = Volley.newRequestQueue(this);
recyclerView = this.findViewById(R.id.colleagues_recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(MyColleaguesPage.this));
recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
myColleagueList = new ArrayList<>();
sendRequest();
} else {
colleagueConfigViews();
}
public boolean getNetworkAvailability() {
return Utils.isNetworkAvailable(getApplicationContext());
}
public void sendRequest() {
trustAllCertificates();
CookieHandler.setDefault( cookieManager );
if (cookieManager==null) {
}
});
AlertDialog alert = builder.create();
alert.show();
} else {
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest( Request.Method.GET, UPLOAD_URL + "/api/users", null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
for (int i = 0; i < response.length(); i++) {
MyColleagueModel mycolleague = new MyColleagueModel();
try {
JSONObject object = response.getJSONObject( i );
mycolleague.setName( object.optString( "name" ) );
mycolleague.setGivenName( object.optString( "givenName" ) );
mycolleague.setCompany( object.optString( "company" ) );
mycolleague.setTitle( object.optString( "title" ) );
mycolleague.setMail( object.optString( "mail" ) );
mycolleague.setMobile( object.optString( "mobile" ) );
mycolleague.setDepartment( object.optString( "department" ) );
} catch (JSONException e) {
e.printStackTrace();
}
myColleagueList.add( mycolleague );
}
adapter = new MyColleaguesAdapter( myColleagueList, MyColleaguesPage.this );
recyclerView.setAdapter( adapter );
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i( "Volley Error: ", error.toString() );
}
} );
rq.add( jsonArrayRequest );
}
}
}
Обновленный ответ
Glide.with( holder.itemView.getContext() )
.load( Constants.HTTP.PHOTO_URL + currentColleague.getMail() )
.skipMemoryCache(getNetworkAvailability())
.signature( new StringSignature( String.valueOf(Constants.HTTP.PHOTO_URL + currentColleague.getMail() ) ) )
.into( holder.colleaguePicture );
public boolean getNetworkAvailability() {
return Utils.isNetworkAvailable(context);
}