- Forum-Beiträge: 4
14.01.2021, 18:12:42 via Website
14.01.2021 18:12:42 via Website
Hey leute,auf stackoverflow habe ich leider keine Antwort bekommen, folgendes ich beschäftige mich seid einiger zeit mit der App entwicklung.
Nun frage ich mich ob meine Lösung um daten live auszulesen richtig ist, funktionieren tut es. Nur bin ich mir nicht ganz sicher, ob ich es richtig gemacht habe.
Folgendes, ich hab in einem RecyclerView ein CardView item, dieses beihaltet zwei Buttons, An und Aus jeweilige dtsndsrt Farbe ist Weiß.
Wenn ich einen Button klicke wird dieser eingefärbt (An = Grün, Aus= Rot).
Je nach dem welchen Button ich klicke, wird unter der Url xxx folgendes zurückgegeben:
{POWER: ON}
Oder
{POWER: OFF}
Ziel war es nun, wenn ich z.b auf "An" klicke, dass falls die App auf einem anderem Gerät offen ist, automatisch die Farbe von Aus auf an springt.
Mit folgendem code funktioniert das auch wie gewünscht, nur hab ich so das Gefühl, dass es keine richtige Lösung ist.
public class JSONStatusParser {
String status;
RequestQueue requestQueue;
public JSONStatusParser() {
}
public void statusrequest(String url, Context view, Button on, Button off, ImageView connectionView){
requestQueue = Volley.newRequestQueue(view);
JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, url ,null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
status = response.toString();
if (status.contains("OFF")) {
on.setBackgroundTintList(ColorStateList.valueOf(Color.WHITE));
off.setBackgroundTintList(ColorStateList.valueOf(Color.RED));
} else if (status.contains("ON")) {
on.setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
off.setBackgroundTintList(ColorStateList.valueOf(Color.WHITE));
} else {
on.setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
off.setBackgroundTintList(ColorStateList.valueOf(Color.RED));
}
} catch (Exception e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//error.printStackTrace();
connectionView.setImageResource(R.drawable.ic_disconnected);
}
});
requestQueue.add(objectRequest);
}
}
Die Methode statusrequest rufe ich in der onBindViewHolder so auf:
autoUpdateHandler = new Handler();
autoUpdateHandler.postDelayed(new Runnable() {
@Override
public void run() {
JSONStatusParser statusParser = new JSONStatusParser();
statusParser.statusrequest(currentItem.getUrl, holder.itemView.getContext(), holder.onButton, holder.offButton,holder.connectView);
autoUpdateHandler.postDelayed(this, 1500);
}
}, 1500);
Nun wird alle 1,5 Sekunden abgefragt, ob ON oder OFF in der Url steht, und die Farben werden dem entsprechend gesetzt.
Ist es so richtig oder nicht?
— geändert am 14.01.2021, 18:13:16
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.