在我的應用程序中,我得到一個包含信息的url的json。我想將這個json保存在手機中,然後使用json,無論手機是否與url相同。如果json改變了,那麼你應該再次下載json。將JSON保存到系統緩存中
我讓我的JSON恢復和閱讀我的對象,但我會保持在JSON的手機內存,並使用JSON避免下載它再次保存數據
你能幫助我嗎?
一個例子:
public void affichage_phenomene(final String id_phenomene)
{
if(id_phenomene.length()==0)
return;
mProgressDialog = ProgressDialog.show(this, "Patientez","Chargement...", true);
new Thread((new Runnable()
{
public void run()
{
try
{
JSONArray jsonArray = Json.getJsonByUrl(page_Json); // On récupère un tableau contenant les éléments json
JSONObject jsonObject = jsonArray.getJSONObject(0);
listItem2 = new ArrayList<HashMap<String, String>>();
map.put("titre", jsonObject.getString("nom"));
map.put("description", jsonObject.getString("description"));
map.put("liens", jsonObject.getString("liens"));
map.put("note_moyenne", jsonObject.getString("note_moyenne"));
map.put("img",LoadPicture.loadImageFromWebOperations(getString(R.string.URL_Images)+jsonObject.getString("image"),"/sdcard/MysticWay/phenomene_"+idphenomene+".jpg"));
JSONArray liste_lieux = jsonObject.getJSONArray("lieux");
nombre_de_lieux = liste_lieux.length();
if(nombre_de_lieux>0)
{
for(int i = 0;i<nombre_de_lieux;i++)
{
map3 = new HashMap<String, String>();
JSONObject lieucible = liste_lieux.getJSONObject(i);
map3.put("idlieu", lieucible.getString("idlieuxspirituels"));
map3.put("nomlieu", lieucible.getString("nom_lieux"));
map3.put("adresse", lieucible.getString("adresse_lieux"));
map3.put("img", LoadPicture.loadImageFromWebOperations(getString(R.string.URL_Images)+lieucible.getString("image"),"/sdcard/MysticWay/icon_lieu_"+lieucible.getString("idlieuxspirituels")+".jpg"));
listItem2.add(map3);
}
}
handler.sendEmptyMessage(0);
return;
}
catch (Exception e)
{
e.printStackTrace();
handler.sendEmptyMessage(1);
return;
}
}
})).start();
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if(msg.what == 0)
{
// Si le transfert c'est bien exécuté
mProgressDialog.dismiss();
Titre.setText(map.get("titre"));
Description.setText(Html.fromHtml(map.get("description")));
Lien.setText(map.get("liens"));
note.setText(map.get("note_moyenne"));
if(nombre_de_lieux==1)
{
View_Fiche_Phenomene.this.liste_lieux.setText(nombre_de_lieux+" lieu est associé à ce phénomène.");
liste_lieux.setEnabled(true);
}
else if (nombre_de_lieux>1)
{
View_Fiche_Phenomene.this.liste_lieux.setText(nombre_de_lieux+" lieux sont associés à ce phénomène.");
liste_lieux.setEnabled(true);
}
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, 0);
if (map.get("img") == null)
Image.setImageResource(R.drawable.noimage);
else
Image.setImageDrawable(Drawable.createFromPath(map.get("img")));
if(Float.parseFloat(map.get("note_moyenne"))== 5)//img 5
notemoyenne.setImageResource(R.drawable.etoile_5);
else if (Float.parseFloat(map.get("note_moyenne"))<5 && Float.parseFloat(map.get("note_moyenne")) > 4)//img 4.5
notemoyenne.setImageResource(R.drawable.etoile_4_5);
else if (Float.parseFloat(map.get("note_moyenne")) == 4)//img 4
notemoyenne.setImageResource(R.drawable.etoile_4);
else if (Float.parseFloat(map.get("note_moyenne"))<4 && Float.parseFloat(map.get("note_moyenne")) > 3)//img 3.5
notemoyenne.setImageResource(R.drawable.etoile_3_5);
else if (Float.parseFloat(map.get("note_moyenne")) == 3)//img 3
notemoyenne.setImageResource(R.drawable.etoile_3);
else if (Float.parseFloat(map.get("note_moyenne"))<3 && Float.parseFloat(map.get("note_moyenne")) > 2)//img 2.5
notemoyenne.setImageResource(R.drawable.etoile_2_5);
else if (Float.parseFloat(map.get("note_moyenne")) == 2)//img 2
notemoyenne.setImageResource(R.drawable.etoile_2);
else if (Float.parseFloat(map.get("note_moyenne"))<2 && Float.parseFloat(map.get("note_moyenne")) > 1)//img 1.5
notemoyenne.setImageResource(R.drawable.etoile_1_5);
else if (Float.parseFloat(map.get("note_moyenne")) == 1)//img 1
notemoyenne.setImageResource(R.drawable.etoile_1);
else if (Float.parseFloat(map.get("note_moyenne"))<1 && Float.parseFloat(map.get("note_moyenne")) > 0)//img 0.5
notemoyenne.setImageResource(R.drawable.etoile_0_5);
//sinon img 0
}
if(msg.what == 1)
{
// Erreur : réseau ou autre
mProgressDialog.dismiss();
AlertDialog.Builder adb=new AlertDialog.Builder(mContext);
adb.setTitle("Erreur");
adb.setMessage("Impossible de comuniquer avec le serveur!");
adb.setPositiveButton("Ok", null);
adb.show();
}
};
};
好的謝謝,但我如何檢測如果json是更新或不? – Algodrill
那麼這一切都取決於數據是什麼以及需要多久更新一次?我不知道一個簡單的方法來檢查它是否不同,而無需再次下載。你可以設置一個服務,每隔幾個小時或每天一次在後臺下載。 –
使用Sqlite數據庫的好主意。 – ajacian81