2016-10-04 4 views
1

オンラインで満足できる回答が見つからないため、この質問を投稿しています。Android:ウェブサービス、オフライン機能

私は外部のサーバーからデータを取り出して(私の場合はlocalhost MySQLサーバーです)、画面に表示するAndroid Appを開発しています。

しかし、この制限は、電話で見ることができるすべてのデータを取得するために、常にインターネットに接続する必要があるという制約があります。

ここでは、外部サーバーからデータを取得したら、そのデータをデバイスに保存して、ユーザーがインターネットに接続しなくてもアプリを開くことができますフェッチされたデータが彼に示されるべきである。

つまり、オフライン機能を使用したいと考えています。

どうすればこの問題を解決できますか?

答えて

0

私は自分のアプリケーションにも同じものを実装しています。コードを見て、それを行う方法を理解するでしょう。私はRetrofitを同じものに使用しました。 sharedpreferenceにあるnursejsonがヌルかどうかを確認しました。それがnullの場合は、そのsharedpreferenceからデータをロードしていない場合、さらにAPIをヒットします。

リストを更新するには、インターネットに接続できているかどうかを確認してから、その共有の優先度を削除してgetnurseメソッドを再度呼び出します。

//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!"); 

       } 
      } 
     }); 

    } 

} 
関連する問題