首页 文章

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

提问于
浏览
0

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

现在我的问题是:在异步任务中制作凌空请求是一个好主意,还是你有更好的解决方案?

谢谢 .

1 回答

  • 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发送到 Headers 中 . 使用此 application/x-www-form-urlencoded 并设置将用户名传递为 Headers 中的params .

    Update: 现在它会起作用 . 对不起,我赶紧写了 . Article about how callback work

相关问题