如何使用Volley在Android中实现登录?

时间:2016-11-05 15:28:54

标签: android android-asynctask android-volley

我有一个LoginActitvity,其中包含两个用于用户名和密码的文本字段以及一个登录按钮。当用户按下按钮时,应用程序将启动异步任务。异步任务实现了我的VolleyHandler。它检查登录参数是否正确并获取一些用户数据(使用volley和json)。执行此操作时,会出现ProgressDialog。当异步任务完成时,它会在onPostExecute方法中启动对MainActivity的意图。

现在我的问题是:在异步任务中发出排球请求是一个好主意,还是你有更好的解决方案?

感谢。

1 个答案:

答案 0 :(得分:0)

你不能使用asynctask。 Volley关心它。您可以使用回调来处理数据和ui。 看起来像这样:

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中发送用户名。你把它作为param发送到标题中。使用此application/x-www-form-urlencoded并设置将用户名传递为标题中的params。

<强>更新 现在它会起作用。对不起,我赶紧写了。 Article about how callback work