2016-11-05 72 views
0

我有一個LoginActitvity,它有兩個用於用戶名和密碼的文本框以及一個登錄按鈕。當用戶按下按鈕時,應用程序啓動一個異步任務。異步任務實現了我的VolleyHandler。它檢查登錄參數是否正確,並提取一些用戶數據(使用volley和json)。在執行此操作時,會出現一個ProgressDialog。當異步任務完成時,它會在onPostExecute方法中啓動MainActivity的意圖。如何使用Volley在Android中實現登錄?

現在我的問題:在異步任務中創建排除請求還是您有更好的解決方案是一個好主意?

謝謝。

+0

Volley已經異步處理http調用。你爲什麼要加入AsyncTask? – Christine

回答

0

你不能使用asynctask。 Volley關心它。您可以使用回調來處理數據和用戶界面。 是這樣的:

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 
    } 
} 

回調:

public interface DownloadCallback { 
    void requestFinish(); 
} 

類下載

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); 
} 

而且一分。不要在json中發送用戶名。你把它作爲參數在頭文件中發送。使用這個application/x-www-form-urlencoded並設置傳遞一個用戶名作爲頭中的參數。

更新: 現在它會工作。對不起,我匆忙寫下了它。 Article about how callback work

+0

謝謝你的回答。我有一些問題,「requestQueue = Volley.newRequestQueue(mContext,DownloadCallback callback);」 - 它說「無法解析符號回調」。你能幫我嗎? – flo

相關問題