Android 将数据从服务发送到Roomdatabase的最佳方式
我正在做一个项目,我需要连接到服务器以获取数据并从地图上的数据中绘制标记,每当数据发生变化时,我需要用新的位置更新地图 我使用一个Roomdatabase、Livedata来观察更改,并使用一个连接到服务器并向存储库发送任何更新的服务。但最好的办法是什么呢 提前谢谢 编辑: 这是到目前为止我的代码,我将尝试解释我所设想的工作方式 首先,我有一个网关实体Android 将数据从服务发送到Roomdatabase的最佳方式,android,service,repository,android-room,android-livedata,Android,Service,Repository,Android Room,Android Livedata,我正在做一个项目,我需要连接到服务器以获取数据并从地图上的数据中绘制标记,每当数据发生变化时,我需要用新的位置更新地图 我使用一个Roomdatabase、Livedata来观察更改,并使用一个连接到服务器并向存储库发送任何更新的服务。但最好的办法是什么呢 提前谢谢 编辑: 这是到目前为止我的代码,我将尝试解释我所设想的工作方式 首先,我有一个网关实体 @Entity(tableName = "gateway_table") public class Gateway {
@Entity(tableName = "gateway_table")
public class Gateway {
private float temp;
private float wertX;
private float wertY;
private String title;
private boolean drawn;
private ArrayList<String> ObjectANames = new ArrayList<>();
@PrimaryKey(autoGenerate = true)
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public float getWertX() {
return wertX;
}
public float getWertY() {
return wertY;
}
public void setWertX(float wertX) {
this.wertX = wertX;
}
public void setWertY(float wertY) {
this.wertY = wertY;
}
public boolean isDrawn() {
return drawn;
}
public void setDrawn(boolean drawn) {
this.drawn = drawn;
}
public float getTemp() {
return temp;
}
public void setTemp(float temp) {
this.temp = temp;
}
public ArrayList<String> getObjectANames() {
return ObjectANames;
}
public Gateway (float wertX, float wertY, String title, boolean drawn, ArrayList<String> ObjectANames){
this.wertX = wertX;
this.wertY = wertY;
this.title = title;
this.drawn = drawn;
this.ObjectANames.addAll(ObjectANames);
}
}
基本上,每个网关在地图上都有一个位置(来自两个浮动)、一个标题、一个布尔值和一个包含ObjectA名称的arraylist。
ObjectA有一个名称、一个包含分配给它的网关的字符串和一个布尔值。
因此,网关可以有多个ObjectA,但每个ObjectA只有一个网关
在这两个DAO中,我都有一个findGateway/ObjectA方法,在该方法中我给出了标题或名称,然后我得到了返回该名称的网关或ObjectA
这是Viewmodel:
public class ViewModel extends AndroidViewModel {
private Repository repository;
private LiveData<List<ObjectA>> allObjectA;
private LiveData<List<Gateway>> allGateways;
private MutableLiveData<SocketService.MyBinder> binderViewModel = new MutableLiveData<>();
public ViewModel(@NonNull Application application) {
super(application);
repository = new Repository(application);
allObjectA = repository.getAllObjectA();
allGateways = repository.getAllGateways();
}
public void insert(ObjectA objectA) throws InterruptedException {
repository.insert(objectA);
}
public void delete(ObjectA objectA) throws InterruptedException {
repository.delete(objectA);
}
public void deleteAllObjectA() throws InterruptedException {
repository.deleteAllObjectA();
}
public void update(ObjectA objectA) throws InterruptedException {
repository.update(objectA);
}
public ObjectA findObjectA(String ObjectAName) throws InterruptedException { return repository.findObjectA(ObjectAName);}
public LiveData<List<ObjectA>> getAllObjectA(){
return allObjectA;
}
public void insert(Gateway gateway) throws InterruptedException {
repository.insert(gateway);
}
public void delete(Gateway gateway) throws InterruptedException {
repository.delete(gateway);
}
public void deleteAllGateways() throws InterruptedException {
repository.deleteAllGateways();
}
public void update(Gateway gateway) throws InterruptedException {
repository.update(gateway);
}
public Gateway findGateway(String gatewayDesignation) throws InterruptedException { return repository.findGateway(gatewayDesignation);}
public LiveData<List<Gateway>> getAllGateways(){
return allGateways;
}
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder iBinder) {
SocketService.MyBinder binder = (SocketService.MyBinder) iBinder;
binderViewModel.postValue(binder);
}
@Override
public void onServiceDisconnected(ComponentName name) {
binderViewModel.postValue(null);
}
};
public ServiceConnection getServiceConnection(){
return serviceConnection;
}
public LiveData<SocketService.MyBinder> getMyBinder(){
return binderViewModel;
}
}
这是ObjectAMarker
public class ObjectAMarker extends MapMarker {
private int pos;
public ObjectAMarker(Context context, float x, float y, String name, int pos) {
super(context, x, y, name);
this.pos = pos;
setImageResource(R.drawable.kuh2_foreground);
}
public int getPos() {
return pos;
}
}
以及地图活动
public class MapMarkerActivity extends AppCompatActivity {
public static final int REQUEST_CONNECTION_STATUS = 0;
private MapViewExt mapView;
private TextView textView;
private EditText textX;
private EditText textY;
private Button button;
private Button buttonDelete;
private Boolean calledFirstTime = true;
private Boolean gatewayMoved = false;
private FrameLayout frameLayout;
private Observer<List<Gateway>> observerGateways;
private Observer<List<ObjectA>> observerObjectA;
private ArrayList<GatewayMarker> gatewayMarkers;
private ArrayList<ObjectAMarker> ObjectAMarkers;
private ViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_marker);
textX = findViewById(R.id.edit_text_x);
textY = findViewById(R.id.edit_text_y);
button = findViewById(R.id.button);
buttonDelete = findViewById(R.id.button_delete);
frameLayout = findViewById(R.id.frame_layout_show_barn);
textView = findViewById(R.id.text_view_connection_mapmarker);
viewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(ViewModel.class);
buttonDelete.setEnabled(false);
button.setEnabled(false);
mapView = makeMapView();
if (mapView != null) {
mapView.setId(R.id.mapview_id);
mapView.setSaveEnabled(true);
frameLayout.addView(mapView);
}
}
private MapViewExt makeMapView() {
// hier Code to create the map
}
private GatewayMarker findGatewayMarker(String title) {
GatewayMarker gatewayMarker1 = null;
for (GatewayMarker gatewayMarker : gatewayMarkers) {
if (gatewayMarker.getName().equals(title)) {
gatewayMarker1 = gatewayMarker;
}
}
return gatewayMarker1;
}
private ObjectAMarker findObjectAMarker(String name) {
ObjectAMarker objectAMarker = null;
for (ObjectAMarker objectAMarker1 : ObjectAMarkers) {
if (objectAMarker1.getName().equals(name)) {
objectAMarker = objectAMarker1;
}
}
return objectAMarker;
}
private ObjectAMarker addNewObjectAMarker(MapViewExt mapView, float x, float y, String name, int pos) {
ObjectAMarker objectAMarker = new ObjectAMarker(this, x, y, name, pos);
mapView.addMarker(objectAMarker);
return objectAMarker;
//MarkerApiKt.addMarker(mapView, marker, x, y, -0.5f, -0.5f, 0f, 0f);
}
private GatewayMarker addNewGatewayMarker(MapViewExt mapView, Gateway gateway) {
boolean[] posTaken = new boolean[3];
posTaken[0] = false;
posTaken[1] = false;
posTaken[2] = false;
GatewayMarker gatewayMarker = new GatewayMarker(this, gateway, posTaken);
mapView.addMarker(gatewayMarker);
return gatewayMarker;
}
@Override
protected void onResume() {
super.onResume();
EventBus.getDefault().register(this);
gatewayMarkers = new ArrayList<>();
ObjectAMarkers = new ArrayList<>();
observerGateways = new Observer<List<Gateway>>() {
@Override
public void onChanged(List<Gateway> gateways) {
for (Gateway gateway : gateways) {
if (!gateway.isDrawn()) {
if (calledFirstTime || gatewayMoved) {
gatewayMoved = false;
GatewayMarker gatewayMarker = addNewGatewayMarker(mapView, gateway);
gatewayMarkers.add(gatewayMarker);
gateway.setDrawn(true);
try {
viewModel.update(gateway);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < gateway.getObjectANames().size(); i++) {
ObjectAMarker objectAMarker;
if (!gatewayMarker.getPosTaken()[0]) {
objectAMarker = addNewObjectAMarker(mapView, gatewayMarker.getXfirstPos(), gatewayMarker.getYfirstPos(), gateway.getObjectANames().get(i), 0);
ObjectAMarkers.add(objectAMarker);
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[0] = true;
} else if (!gatewayMarker.getPosTaken()[1]) {
objectAMarker = addNewObjectAMarker(mapView, gatewayMarker.getXSecondPos(), gatewayMarker.getYSecondPos(), gateway.getObjectANames().get(i), 1);
ObjectAMarkers.add(objectAMarker);
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[1] = true;
} else if (!gatewayMarker.getPosTaken()[2]) {
objectAMarker = addNewObjectAMarker(mapView, gatewayMarker.getXThirdPos(), gatewayMarker.getYThirdPos(), gateway.getObjectANames().get(i), 2);
ObjectAMarkers.add(objectAMarker);
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[2] = true;
return;
}
}
}
} else {
GatewayMarker gatewayMarker = findGatewayMarker(gateway.getTitle());
for (int i = 0; i < gateway.getObjectANames().size(); i++) {
try {
if (!viewModel.findObjectA(gateway.getObjectANames().get(i)).isDrawn()) {
if (!gatewayMarker.getPosTaken()[0]) {
ObjectAMarker objectAMarker = findObjectAMarker(gateway.getObjectANames().get(i));
ObjectAMarkers.remove(objectAMarker);
ObjectAMarkers.add(addNewObjectAMarker(mapView, gatewayMarker.getXfirstPos(), gatewayMarker.getYfirstPos(), gateway.getObjectANames().get(i), 0));
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[0] = true;
} else if (!gatewayMarker.getPosTaken()[1]) {
ObjectAMarker objectAMarker = findObjectAMarker(gateway.getObjectANames().get(i));
ObjectAMarkers.remove(objectAMarker);
ObjectAMarkers.add(addNewObjectAMarker(mapView, gatewayMarker.getXSecondPos(), gatewayMarker.getYSecondPos(), gateway.getObjectANames().get(i), 1));
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[1] = true;
} else if (!gatewayMarker.getPosTaken()[2]) {
ObjectAMarker objectAMarker = findObjectAMarker(gateway.getObjectANames().get(i));
ObjectAMarkers.remove(objectAMarker);
ObjectAMarkers.add(addNewObjectAMarker(mapView, gatewayMarker.getXThirdPos(), gatewayMarker.getYThirdPos(), gateway.getObjectANames().get(i), 2));
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[2] = true;
} else {
return;
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
calledFirstTime = false;
}
};
observerObjectA = new Observer<List<ObjectA>>() {
@Override
public void onChanged(List<ObjectA> objectAS) {
}
};
viewModel.getAllObjectA().observe(this, observerObjectA);
viewModel.getAllGateways().observe(this, observerGateways);
}
@Override
protected void onPause() {
super.onPause();
List<ObjectA> allKühe = viewModel.getAllObjectA().getValue();
List<Gateway> allGateways = viewModel.getAllGateways().getValue();
for (ObjectA objectA : allKühe) {
objectA.setDrawn(false);
try {
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (Gateway gateway : allGateways) {
gateway.setDrawn(false);
try {
viewModel.update(gateway);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
viewModel.getAllGateways().removeObserver(observerGateways);
viewModel.getAllObjectA().removeObserver(observerObjectA);
calledFirstTime = true;
for (int i = 0; i < ObjectAMarkers.size(); i++) {
MarkerApiKt.removeMarker(mapView, ObjectAMarkers.get(i));
}
ObjectAMarkers.clear();
for (int i = 0; i < gatewayMarkers.size(); i++) {
MarkerApiKt.removeMarker(mapView, gatewayMarkers.get(i));
}
gatewayMarkers.clear();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void getconnectionstatus(IntentServiceResult intentServiceResult) throws InterruptedException {
if (intentServiceResult.getResult() == REQUEST_CONNECTION_STATUS) {
textView.setText(intentServiceResult.getResultvalue());
}
if (intentServiceResult.getResult() == 1) {
ObjectA objectA = intentServiceResult.getResultObjectA();
ObjectA objectAOld = intentServiceResult.getResultObjectAOld();
Gateway gateway = viewModel.findGateway(objectA.getGateway());
Gateway gatewayOld = viewModel.findGateway(objectAOld.getGateway());
gatewayOld.getObjectANames().remove(objectAOld.getName());
gateway.getObjectANames().add(objectA.getName());
viewModel.update(gatewayOld);
viewModel.update(gateway);
ObjectAMarker objectAMarker = findObjectAMarker(objectAOld.getName());
GatewayMarker gatewayMarker = findGatewayMarker(gatewayOld.getTitle());
gatewayMarker.getPosTaken()[objectAMarker.getPos()] = false;
MarkerApiKt.removeMarker(mapView, objectAMarker);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
public class GatewayMarker extends MapMarker {
private Gateway gateway;
private boolean[] posTaken;
public GatewayMarker(Context context, Gateway gateway, boolean[] posTaken) {
super(context, gateway.getWertX(), gateway.getWertY(), gateway.getTitle());
this.gateway = gateway;
this.posTaken = posTaken;
setImageResource(R.drawable.gateway_foreground);
}
public float getXfirstPos() {
return gateway.getWertX() + 0.05f;
}
public float getYfirstPos() {
return gateway.getWertY() + 0.05f;
}
public float getXSecondPos() {
return gateway.getWertX() - 0.05f;
}
public float getYSecondPos() {
return gateway.getWertY() + 0.05f;
}
public float getXThirdPos() {
return gateway.getWertX();
}
public float getYThirdPos() {
return gateway.getWertY() - 0.05f;
}
public boolean[] getPosTaken() {
return posTaken;
}
}
public class ObjectAMarker extends MapMarker {
private int pos;
public ObjectAMarker(Context context, float x, float y, String name, int pos) {
super(context, x, y, name);
this.pos = pos;
setImageResource(R.drawable.kuh2_foreground);
}
public int getPos() {
return pos;
}
}
public class MapMarkerActivity extends AppCompatActivity {
public static final int REQUEST_CONNECTION_STATUS = 0;
private MapViewExt mapView;
private TextView textView;
private EditText textX;
private EditText textY;
private Button button;
private Button buttonDelete;
private Boolean calledFirstTime = true;
private Boolean gatewayMoved = false;
private FrameLayout frameLayout;
private Observer<List<Gateway>> observerGateways;
private Observer<List<ObjectA>> observerObjectA;
private ArrayList<GatewayMarker> gatewayMarkers;
private ArrayList<ObjectAMarker> ObjectAMarkers;
private ViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_marker);
textX = findViewById(R.id.edit_text_x);
textY = findViewById(R.id.edit_text_y);
button = findViewById(R.id.button);
buttonDelete = findViewById(R.id.button_delete);
frameLayout = findViewById(R.id.frame_layout_show_barn);
textView = findViewById(R.id.text_view_connection_mapmarker);
viewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(ViewModel.class);
buttonDelete.setEnabled(false);
button.setEnabled(false);
mapView = makeMapView();
if (mapView != null) {
mapView.setId(R.id.mapview_id);
mapView.setSaveEnabled(true);
frameLayout.addView(mapView);
}
}
private MapViewExt makeMapView() {
// hier Code to create the map
}
private GatewayMarker findGatewayMarker(String title) {
GatewayMarker gatewayMarker1 = null;
for (GatewayMarker gatewayMarker : gatewayMarkers) {
if (gatewayMarker.getName().equals(title)) {
gatewayMarker1 = gatewayMarker;
}
}
return gatewayMarker1;
}
private ObjectAMarker findObjectAMarker(String name) {
ObjectAMarker objectAMarker = null;
for (ObjectAMarker objectAMarker1 : ObjectAMarkers) {
if (objectAMarker1.getName().equals(name)) {
objectAMarker = objectAMarker1;
}
}
return objectAMarker;
}
private ObjectAMarker addNewObjectAMarker(MapViewExt mapView, float x, float y, String name, int pos) {
ObjectAMarker objectAMarker = new ObjectAMarker(this, x, y, name, pos);
mapView.addMarker(objectAMarker);
return objectAMarker;
//MarkerApiKt.addMarker(mapView, marker, x, y, -0.5f, -0.5f, 0f, 0f);
}
private GatewayMarker addNewGatewayMarker(MapViewExt mapView, Gateway gateway) {
boolean[] posTaken = new boolean[3];
posTaken[0] = false;
posTaken[1] = false;
posTaken[2] = false;
GatewayMarker gatewayMarker = new GatewayMarker(this, gateway, posTaken);
mapView.addMarker(gatewayMarker);
return gatewayMarker;
}
@Override
protected void onResume() {
super.onResume();
EventBus.getDefault().register(this);
gatewayMarkers = new ArrayList<>();
ObjectAMarkers = new ArrayList<>();
observerGateways = new Observer<List<Gateway>>() {
@Override
public void onChanged(List<Gateway> gateways) {
for (Gateway gateway : gateways) {
if (!gateway.isDrawn()) {
if (calledFirstTime || gatewayMoved) {
gatewayMoved = false;
GatewayMarker gatewayMarker = addNewGatewayMarker(mapView, gateway);
gatewayMarkers.add(gatewayMarker);
gateway.setDrawn(true);
try {
viewModel.update(gateway);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < gateway.getObjectANames().size(); i++) {
ObjectAMarker objectAMarker;
if (!gatewayMarker.getPosTaken()[0]) {
objectAMarker = addNewObjectAMarker(mapView, gatewayMarker.getXfirstPos(), gatewayMarker.getYfirstPos(), gateway.getObjectANames().get(i), 0);
ObjectAMarkers.add(objectAMarker);
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[0] = true;
} else if (!gatewayMarker.getPosTaken()[1]) {
objectAMarker = addNewObjectAMarker(mapView, gatewayMarker.getXSecondPos(), gatewayMarker.getYSecondPos(), gateway.getObjectANames().get(i), 1);
ObjectAMarkers.add(objectAMarker);
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[1] = true;
} else if (!gatewayMarker.getPosTaken()[2]) {
objectAMarker = addNewObjectAMarker(mapView, gatewayMarker.getXThirdPos(), gatewayMarker.getYThirdPos(), gateway.getObjectANames().get(i), 2);
ObjectAMarkers.add(objectAMarker);
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[2] = true;
return;
}
}
}
} else {
GatewayMarker gatewayMarker = findGatewayMarker(gateway.getTitle());
for (int i = 0; i < gateway.getObjectANames().size(); i++) {
try {
if (!viewModel.findObjectA(gateway.getObjectANames().get(i)).isDrawn()) {
if (!gatewayMarker.getPosTaken()[0]) {
ObjectAMarker objectAMarker = findObjectAMarker(gateway.getObjectANames().get(i));
ObjectAMarkers.remove(objectAMarker);
ObjectAMarkers.add(addNewObjectAMarker(mapView, gatewayMarker.getXfirstPos(), gatewayMarker.getYfirstPos(), gateway.getObjectANames().get(i), 0));
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[0] = true;
} else if (!gatewayMarker.getPosTaken()[1]) {
ObjectAMarker objectAMarker = findObjectAMarker(gateway.getObjectANames().get(i));
ObjectAMarkers.remove(objectAMarker);
ObjectAMarkers.add(addNewObjectAMarker(mapView, gatewayMarker.getXSecondPos(), gatewayMarker.getYSecondPos(), gateway.getObjectANames().get(i), 1));
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[1] = true;
} else if (!gatewayMarker.getPosTaken()[2]) {
ObjectAMarker objectAMarker = findObjectAMarker(gateway.getObjectANames().get(i));
ObjectAMarkers.remove(objectAMarker);
ObjectAMarkers.add(addNewObjectAMarker(mapView, gatewayMarker.getXThirdPos(), gatewayMarker.getYThirdPos(), gateway.getObjectANames().get(i), 2));
try {
ObjectA objectA = viewModel.findObjectA(gateway.getObjectANames().get(i));
objectA.setDrawn(true);
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
gatewayMarker.getPosTaken()[2] = true;
} else {
return;
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
calledFirstTime = false;
}
};
observerObjectA = new Observer<List<ObjectA>>() {
@Override
public void onChanged(List<ObjectA> objectAS) {
}
};
viewModel.getAllObjectA().observe(this, observerObjectA);
viewModel.getAllGateways().observe(this, observerGateways);
}
@Override
protected void onPause() {
super.onPause();
List<ObjectA> allKühe = viewModel.getAllObjectA().getValue();
List<Gateway> allGateways = viewModel.getAllGateways().getValue();
for (ObjectA objectA : allKühe) {
objectA.setDrawn(false);
try {
viewModel.update(objectA);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (Gateway gateway : allGateways) {
gateway.setDrawn(false);
try {
viewModel.update(gateway);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
viewModel.getAllGateways().removeObserver(observerGateways);
viewModel.getAllObjectA().removeObserver(observerObjectA);
calledFirstTime = true;
for (int i = 0; i < ObjectAMarkers.size(); i++) {
MarkerApiKt.removeMarker(mapView, ObjectAMarkers.get(i));
}
ObjectAMarkers.clear();
for (int i = 0; i < gatewayMarkers.size(); i++) {
MarkerApiKt.removeMarker(mapView, gatewayMarkers.get(i));
}
gatewayMarkers.clear();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void getconnectionstatus(IntentServiceResult intentServiceResult) throws InterruptedException {
if (intentServiceResult.getResult() == REQUEST_CONNECTION_STATUS) {
textView.setText(intentServiceResult.getResultvalue());
}
if (intentServiceResult.getResult() == 1) {
ObjectA objectA = intentServiceResult.getResultObjectA();
ObjectA objectAOld = intentServiceResult.getResultObjectAOld();
Gateway gateway = viewModel.findGateway(objectA.getGateway());
Gateway gatewayOld = viewModel.findGateway(objectAOld.getGateway());
gatewayOld.getObjectANames().remove(objectAOld.getName());
gateway.getObjectANames().add(objectA.getName());
viewModel.update(gatewayOld);
viewModel.update(gateway);
ObjectAMarker objectAMarker = findObjectAMarker(objectAOld.getName());
GatewayMarker gatewayMarker = findGatewayMarker(gatewayOld.getTitle());
gatewayMarker.getPosTaken()[objectAMarker.getPos()] = false;
MarkerApiKt.removeMarker(mapView, objectAMarker);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
@androidx.room.Database(entities = {ObjectA.class, Gateway.class}, version = 26)
@TypeConverters({Converters.class})
public abstract class Database extends RoomDatabase {
private static volatile Database instance;
public abstract ObjectADAO cowDAO();
public abstract GatewayDAO gatewayDAO();
public static synchronized Database getInstance(Context context){
if (instance == null){
instance = Room.databaseBuilder(context.getApplicationContext(),
Database.class,"database")
.fallbackToDestructiveMigration()
.build();
}
return instance;
}
}