2016-10-04 5 views
1

Ich schreibe diese Frage, weil ich keine zufriedenstellenden Antworten online finden konnte.Android: Webdienste, Offline-Fähigkeit

Ich entwickle eine Android App, in der die Daten vom externen Server (in meinem Fall ist es localhost MySQL Server jetzt) ​​abgerufen und auf dem Bildschirm angezeigt werden.

Die Einschränkung mit diesem ist jedoch, dass die Person immer mit dem Internet verbunden sein sollte, um alle Daten zu erhalten, die auf dem Telefon angesehen werden können.

Nun, was ich erreichen möchte, ist, sobald die Daten vom externen Server abgerufen wurden, sollte es auf dem Gerät gespeichert werden, so dass, obwohl der Benutzer die App ohne Verbindung zum Internet öffnet, die zuvor Die abgerufenen Daten sollten ihm angezeigt werden.

Mit anderen Worten, ich möchte die Offline-Fähigkeit haben.

Wie kann ich das erreichen?

Antwort

0

Ich habe das gleiche für meine App implementiert. Schau dir den Code an und du wirst verstehen, wie es geht. Ich habe Retrofit für dasselbe verwendet. Ich habe überprüft, ob die Krankenschwester, die in sharedpreference ist, null ist. Wenn es null ist, fahre fort, die API zu treffen, wenn nicht, dann lade Daten von dieser geteilten Präferenz.

Um die Liste zu aktualisieren, überprüfen Sie einfach, ob Sie eine Internetverbindung haben und löschen Sie dann diese geteilte Voreinstellung und rufen Sie die Methode getnurse erneut auf.

//After Oncreate 
pref = getApplicationContext().getSharedPreferences("CachedResponse", 0); 
editor = pref.edit(); 
editor.apply(); 
// Call getNurses method 
getNurses(); 



//Method to get Nurses 
public void getNurses() { 

    nurseJson = pref.getString("nurseJson", null); 

    if (nurseJson != null) { 

     progressBar.setVisibility(View.INVISIBLE); 

     gson = new Gson(); 
     nurse = gson.fromJson(nurseJson, Nurse.class); 
     nurseList = nurse.getNurse(); 
     namesArrayList.clear(); 

     for (String nurses : nurseList) { 
      namesArrayList.add(nurses); 
     } 

     namesAdapter.notifyDataSetChanged(); 

    } else { 

     Call<Nurse> call = apiInterface.getNursesList(); 
     call.enqueue(new Callback<Nurse>() { 
      @Override 
      public void onResponse(Call<Nurse> call, Response<Nurse> response) { 

       progressBar.setVisibility(View.INVISIBLE); 

       onItemsLoadComplete(); 

       if (response.isSuccessful()) { 

        nurse = response.body(); 

        nurseJson = new Gson().toJson(nurse); 
        editor.putString("nurseJson", nurseJson); 
        editor.commit(); 

        nurseList = nurse.getNurse(); 

        namesArrayList.clear(); 

        for (String nurses : nurseList) { 
         namesArrayList.add(nurses); 
        } 

        namesAdapter.notifyDataSetChanged(); 

       } else { 

        utility.createSnackbar(coordinatorLayout, "Error Occurred, Please Try Again Later!"); 

       } 
      } 

      @Override 
      public void onFailure(Call<Nurse> call, Throwable t) { 

       progressBar.setVisibility(View.INVISIBLE); 

       onItemsLoadComplete(); 

       if (t.getLocalizedMessage() != null) { 

        if (t.getLocalizedMessage().contains("Unable to resolve host")) { 

         utility.createSnackbar(coordinatorLayout, "Please Check Internet Connection!"); 

        } else { 

         utility.createSnackbar(coordinatorLayout, "Error Occurred, Please Try Again Later!"); 

        } 

       } else { 

        utility.createSnackbar(coordinatorLayout, "Error Occurred, Please Try Again Later!"); 

       } 
      } 
     }); 

    } 

}