2012-05-01 2 views
1

내 응용 프로그램에서 json에 정보가 들어있는 URL이 있습니다. 나는이 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(); 
     } 
    }; 
}; 

답변

1

Sqlite db를 사용하여 결과를 저장하는 것이 좋습니다. 데이터가 변경되었는지 여부를 확인하는 데는 몇 가지 방법이 있습니다. 결과가 마지막으로 변경된 시간을 포함 할 수있는 Last-Modified 헤더를 서버 측에 추가 할 수 있습니다. 마지막으로 수정 한 시간이 마지막으로 JSON 요청 (Sqlite DB에서 확인할 수 있음)을 얻은 때와 같으면 요청 본문을 다운로드 할 필요가 없습니다.

타임 스탬프를 추적하고 싶지 않은 경우 (최선의 방법 임에도 불구하고) MD5 해시 또는 SHA1 또는 리소스가 가장 적은 항목을 추적하는 것이 좋습니다. 그런 다음 해시를 HTTP 헤더에 넣을 수 있으며 해시가 Sqlite db에 저장된 내용과 일치하면 콘텐츠를 다운로드 할 필요가 없습니다. 이것은 (시간과 자원면에서) 서버 측에서 암호화를 수행하는 데 드는 비용이 있기 때문에 네트워크를 통해 더 많은 양의 JSON 데이터를 전송할 때만 유용합니다.

1

당신이 그것을 다운로드 할 때 내가 SQLite는 DB에 데이터를 저장합니다. 그런 다음 원하는대로 조작하고 특정 행을 업데이트 할 수 있습니다.

+0

감사합니다.하지만 json이 업데이트되었는지 어떻게 알 수 있습니까? – Algodrill

+0

데이터는 무엇이며 얼마나 자주 업데이트해야하는지에 따라 다릅니다. 나는 그것을 다시 다운로드하지 않고도 다른지 쉽게 확인할 수 있습니다. 몇 시간마다 또는 하루에 한 번 백그라운드에서 다운로드하도록 서비스를 설정할 수 있습니다. –

+0

Sqlite DB 사용에 대한 좋은 아이디어입니다. – ajacian81

관련 문제