2016-11-05 1 views
0

Ich habe eine LoginActivity mit zwei Textfeldern für Benutzername und Passwort und einen Login-Button. Wenn der Benutzer die Taste drückt, startet die App eine asynchrone Aufgabe. Die Async-Task implementiert meinen VolleyHandler. Es überprüft, ob die Login-Parameter korrekt sind und holt einige Benutzerdaten (mit Volley und Json). Währenddessen erscheint ein ProgressDialog. Wenn die asynchrone Task abgeschlossen ist, startet sie eine Absicht für die MainActivity in der onPostExecute-Methode.Wie man ein Login in Android mit Volley implementieren?

Jetzt zu meiner Frage: Ist es eine gute Idee, Volley-Anfragen in der asynchronen Aufgabe zu machen, oder haben Sie eine bessere Lösung?

Danke.

+0

Volley behandelt http Anrufe asynchron bereits. Warum würdest du eine AsyncTask einbauen? – Christine

Antwort

0

Sie können asynctask nicht verwenden. Volley kümmern sich darum. Sie können Callback für die Arbeit mit Daten und ui verwenden. sieht wie folgt aus:

public class LoginActivity extends SinglePaneActivity implements DownloadCallback { 

//... 


public void sendRequest(){ 
    Downloader download = new Download(this); 
    downloader.download(userName, password); 
    progresbar.show(); 
} 

public void requestFinish(){ 
progersbar.dismis(); 
//... continue 
    } 
} 

Rückruf:

public interface DownloadCallback { 
    void requestFinish(); 
} 

in Klasse Downloader

private RequestQueue requestQueue; 
DownloadCallback mcallback; 

public void Downloader(DownloadCallback callback){ 
    mCallback = callback; 
    requestQueue = Volley.newRequestQueue(mContext); 
    initVolleyListeners(); 
} 

private void initVolleyListeners() { 

    mSuccessListener = new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      mCallback.requestFinish(); 
     } 
    }; 

    mErrorListener = new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      mCallback.requestFinish(); 
     } 
    }; 

public void download(String user, String pass){ 
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, createJson(user, pass), mSuccessListener , mErrorListener) { 
     //header for send JSON to server 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type", "application/json; charset=utf-8"); 
      return headers; 
     } 
    }; 

    requestQueue.add(jsonObjectRequest); 
} 

Und einen Punkt. Senden Sie keinen Benutzernamen in JSON. Sie senden es als Parameter im Header. Verwenden Sie diese application/x-www-form-urlencoded und richten Sie einen Benutzernamen als Parameter in der Kopfzeile ein.

Update: Jetzt wird es funktionieren. Tut mir leid, ich habe es in Eile geschrieben. Article about how callback work

+0

Vielen Dank für Ihre Antwort. Ich habe Probleme mit der Zeile "requestQueue = Volley.newRequestQueue (mContext, DownloadCallback Callback);" - es sagt "kann Symbol Callback nicht auflösen". Kannst du mir bitte helfen? – flo