gpt4 book ai didi

android - 将 JSON 保存到系统缓存

转载 作者:行者123 更新时间:2023-11-29 22:07:44 25 4
gpt4 key购买 nike

在我的应用程序中,我得到一个包含信息的 json url。我想将这个 json 保存在手机中,然后使用 json 判断手机是否与 url 相同。如果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();
}
};
};

最佳答案

使用 Sqlite 数据库存储结果是个好主意。至于检查数据是否已更改,有几种方法可以做到这一点 - 您可以在服务器端添加一个 Last-Modified header ,其中可以包含结果上次更改的时间。如果 Last-Modified 时间与您上次收到 JSON 请求的时间相同(您可以在您的 Sqlite 数据库中查看),则无需下载请求的主体。

如果您不想跟踪时间戳(虽然这是最好的方法),另一种方法是跟踪 MD5 哈希值或 SHA1,或任何占用资源最少的方法。然后你可以把散列放在 HTTP header 中,如果散列与你存储在 Sqlite 数据库中的内容匹配,那么就不需要下载内容。这仅对将通过网络传输的大量 JSON 数据有用,因为在服务器端进行加密会产生成本(在时间和资源方面)。

关于android - 将 JSON 保存到系统缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com