2016-06-18 62 views
0

Im Moment habe ich Arbeitscode für meine Android-Anwendung. Ich benutze Volley, aber wegen Callbacks habe ich nicht das Gefühl, dass mein Code so sauber ist wie er sein könnte.Wie man Volley in der Android-Programmierung verwendet und Code sauber hält? (Callback-Probleme)

Zwei Funktionen meines Codes sind jetzt:

private void updateSettings() { 
    ... 
     HTTP.requestObject(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        shiftStart = getHour(response.getString("shift_start")); 
        shiftEnd = getHour(response.getString("shift_end")); 
       } catch (JSONException e) { 
        Log.i(MainActivity.TAG, "JSON parse error: " + e.toString()); 
        e.printStackTrace(); 
       } 

       startCall(); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       HTTP.handleError(error, getApplicationContext()); 
       startCall(); 
      } 
     }, getApplicationContext()); 
    ... 
} 

private void startCall() { 
    ... 
    CallActivity.makeCall(getApplicationContext()); 
    ... 
} 

Der Punkt hier ist, dass ich ein „Anruf“ machen wollen, was nicht sehr wichtig ist, aber vorher muss ich meine Einstellungen aktualisieren vom Server. Natürlich muss ich den Anruf tätigen, nachdem die Einstellungen aktualisiert wurden, also starte ich den Call aus dem Volley Callback (ich benutze HTTP.requestObject, eine benutzerdefinierte Klasse, die ich gemacht habe, aber es fügt die Anfrage nur der Anfrage hinzu Warteschlange und setzt ein Timeout). Das Problem ist, dass wenn Sie die Funktion updateSettings() aufrufen, Sie nicht wirklich erwarten, einen "Anruf" oder ähnliches zu starten. Wie kann dies vermieden werden?

P.S. Ich bin mir nicht sicher, ob ich das Thema klar erläutere. Bitte fragen Sie unten, wenn Sie mich klären müssen.

Antwort

2

Wenn die Methode nur zum Aktualisieren einiger Einstellungen entwickelt wurde, dann sollten Sie das Prinzip der einfachen Verantwortlichkeit für diese Methode erzwingen und keinen Aufruf tätigen, wenn dies nicht beabsichtigt ist.

Der Weg herum ist, im Wesentlichen das Callback-Parametermuster von Volleys zu kopieren. Haben Sie eine OnSettingsUpdatedListener Schnittstelle, die an die Methode zum Aktualisieren von Einstellungen übergeben wird, rufen Sie dann die Methoden des Listeners dort auf, der zurück zu dem Ort führt, an dem Sie ihn aufgerufen haben, an dem Sie einen Anruf oder was auch immer machen können.