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
Volley behandelt http Anrufe asynchron bereits. Warum würdest du eine AsyncTask einbauen? – Christine