diff --git a/app/src/main/java/com/example/cosmosclient/entities/Group.java b/app/src/main/java/com/example/cosmosclient/entities/Group.java index 1ee3c6d..9e8b5c8 100644 --- a/app/src/main/java/com/example/cosmosclient/entities/Group.java +++ b/app/src/main/java/com/example/cosmosclient/entities/Group.java @@ -8,6 +8,7 @@ public class Group { private String gId; private String uri, name; + private long requestHash; /* Userどうするか private ArrayList members; */ @@ -26,6 +27,7 @@ public Group(GroupJson groupJson){ setgId(groupJson.getgId()); setUri(groupJson.getUri()); + clearRequestHash(); setName(groupJson.getName()); } @@ -61,6 +63,22 @@ return name; } + public long getRequestHash() { + return requestHash; + } + + public void setRequestHash(long requestHash) { + this.requestHash = requestHash; + } + + public void clearRequestHash(){ + setRequestHash(0); + } + + public void updateRequestHash(){ + setRequestHash(getRequestHash()+1); + } + public RequestList getRequestList(){ return requestList; } diff --git a/app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java b/app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java index 28b1dcf..68a3f40 100644 --- a/app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java +++ b/app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java @@ -13,7 +13,6 @@ import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; -import android.location.LocationProvider; import android.os.Build; import android.os.Bundle; import android.provider.Settings; @@ -22,6 +21,23 @@ import android.util.Log; import com.example.cosmosclient.R; +import com.example.cosmosclient.app.Cosmos; +import com.example.cosmosclient.entities.Group; +import com.example.cosmosclient.entities.GroupListResponse; +import com.example.cosmosclient.entities.RequestList; +import com.example.cosmosclient.entities.jsons.GroupJson; +import com.example.cosmosclient.resources.GroupsRest; + +import java.io.IOException; +import java.util.TimeZone; +import java.util.Timer; +import java.util.TimerTask; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; public class CosomosBackgroundService extends IntentService implements LocationListener { @@ -87,6 +103,15 @@ } startGPS(); + Timer timer = new Timer(); + TimerTask task = new TimerTask() { + @Override + public void run() { + startUpdateRequest(); + } + }; + //timer.scheduleAtFixedRate(定期的に実行したいタスク,初回のタスク実行までの時間(ms),実行するタスクの間隔(ms)); + timer.scheduleAtFixedRate(task, 10000, 300000); return START_NOT_STICKY; } @@ -98,7 +123,7 @@ } protected void startGPS() { -// Log.d("debug", "startGPS"); + Log.d("debug", "startGPS"); final boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); @@ -156,8 +181,95 @@ } + private void startUpdateRequest() { + final Cosmos app = (Cosmos) getApplication(); + if(app.getuId() != null) { + final String uId, token; + uId = app.getuId(); + token = app.getToken(); + + //retrofitの処理 + final Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + //interfaceから実装を取得 + final GroupsRest getGroupsService = retrofit.create(GroupsRest.class); + final GroupsRest getRequestsService = retrofit.create(GroupsRest.class); + + //API呼び出しのための値入力 + final Call call = getGroupsService.getGroups(uId, token); + + //サーバからデータ受け取り + call.enqueue(new Callback() { + //成功時 + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + final GroupListResponse groupListresult = response.body(); + Log.d("debug", "GroupListResponseグループ情報通信取得しました"); + + new Thread(new Runnable() { + public void run() { + for (GroupJson groupJson : groupListresult.getGroups()) { + app.setGroup(new Group(groupJson)); + if (groupJson.getRequestHash() != app.getGroup(groupJson.getgId()).getRequestHash()) { + //RequestList取得するための必要な情報 + final String gId = groupJson.getgId(); + final boolean detail = true; + int quantity = 20; + + final Call requestsListByGidCall = getRequestsService.getRequestsListByGid(gId, token, detail, quantity); + Response requestListResponse; + try { + requestListResponse = requestsListByGidCall.execute(); + if (requestListResponse.isSuccessful()) { + TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo")); + RequestList requestList = requestListResponse.body(); + app.getGroup(groupJson.getgId()).setRequestList(requestList); + app.getGroup(groupJson.getgId()).setRequestHash(groupJson.getRequestHash()); + Log.d("debug", groupJson.getName() + "のRequestListを取得しました"); + } else { + // onFailure + try { + System.out.println(requestListResponse.errorBody().string()); + } catch (IOException e) { + e.printStackTrace(); + } + + //onFailureでキャッチできないエラーの処理 + Log.d("debug", groupJson.getName() + "の通信エラー"); + } + } catch (IOException e) { + e.printStackTrace(); + Log.d("debug", groupJson.getName() + "のRequestListの取得失敗しました"); + } + } + } + } + }).start(); + } else { + //onFailureでキャッチできないエラー用 + Log.d("debug", "GroupListResponseグループ情報通信エラー"); + } + } + + //失敗時 + @Override + public void onFailure(Call call, Throwable t) { + t.printStackTrace(); + Log.d("debug", "GroupListResponseグループ情報取得失敗"); + } + }); + } else { + Log.d("debug", "app.getuId()がnull"); + } + + } + private void enableLocationSettings() { Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(settingsIntent); }