Hey leute, 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:
oder
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.
Die Methode statusrequest rufe ich in der onBindViewHolder so auf:
Nun wird alle 1,5 Sekunden abgefragt, ob ON oder OFF in der Url steht, und die Farben werden dem entsprechend gesetzt.
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:
JSON:
{POWER:ON}
JSON:
{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.
Java:
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, "http://" + 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:
Java:
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.