Comment remplir la grille si Internet n'est pas disponible mais des images déjà cachées sur la carte SD
-
21-12-2019 - |
Question
Bonjour J'écris une application dans laquelle je suis en train d'analyser des images JSON, puis de la mise en cache dans la carte SD.
ce que je veux faire?
Je veux charger des images dans GridView de JSON (en mettant en cache des images dans la carte SD), et wanna populez-vous GridView (peu importe Internet disponible ou non) une fois les images déjà téléchargées dans la carte SD.
Je suis capable de mettre en cache des images dans la carte SD, également de remplir la grille de la grille, mais de ne pas pouvoir afficher des images dans GridView (si Internet non disponible) mais des images mis en cache dans la carte SD
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_view);
gridView = (GridView) findViewById(R.id.grid_view);
utils = new Util(this);
// Initilizing Grid View
InitilizeGridLayout();
// Gridview adapter
new getImages().execute();
}
private void InitilizeGridLayout() {
Resources r = getResources();
float padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
AppConstant.GRID_PADDING, r.getDisplayMetrics());
columnWidth = (int) ((utils.getScreenWidth() - ((AppConstant.NUM_OF_COLUMNS + 1) * padding)) / AppConstant.NUM_OF_COLUMNS);
gridView.setNumColumns(AppConstant.NUM_OF_COLUMNS);
gridView.setColumnWidth(columnWidth);
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setPadding((int) padding, (int) padding, (int) padding,
(int) padding);
gridView.setHorizontalSpacing((int) padding);
gridView.setVerticalSpacing((int) padding);
}
class getImages extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
JSONObject json = JSONfunctions.getJSONfromURL(location);
try {
JSONArray jarray;
jarray = json.getJSONArray(TAG_ITEMS);
for (int i = 0; i < jarray.length(); i++) {
JSONObject gridImages = jarray.getJSONObject(i);
imagePaths.add(gridImages.getString("saved_location"));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
adapter = new GridViewImageAdapter(GridViewActivity.this, imagePaths,
columnWidth);
// setting grid view adapter
gridView.setAdapter(adapter);
}
}
}
La solution
Voici la solution complète d'affichage des images du serveur via JSON Online également hors ligne.
En espérant que cela résoudra votre problème.
merci
Autres conseils
C'est mieux que vous utilisez la luisyloading .. Cela mettra en cache les images et affichera des images, même s'il n'y a pas d'Internet n'est disponible
Vous pouvez soit utiliser thest1 / lazyliste
ou avance de mise en cache d'image android-universel-image-charger d'ici
Android-Universal-Image-Loader contient des exemples différents, y compris la lazylodage en vue de la grille.
J'espère que cela vous aidera
Je pense que cela peut vous aider.Il suffit de mettre un autre si Block avant de vérifier la connexion Internet
if(SDcard is emty)
{
if(netAvailable)
{go as usual}
}else{nothing}
}
else{
take images from sd card and display it.}
Cela pourrait vous donner un indice pour résoudre le problème ...... Si vous souhaitez actualiser vos données de carte SD, avant de frapper le service Web Effacer le SDCard.