2016-11-05 19 views
0

私は、ユーザー名とパスワードとログインボタンの2つのテキストフィールドを持つLoginActitvityを持っています。ユーザーがボタンを押すと、アプリケーションは非同期タスクを開始します。非同期タスクは私のVolleyHandlerを実装します。ログインパラメータが正しいかどうかをチェックし、いくつかのユーザデータを取得します(volleyとjsonを使用して)。これを行うと、ProgressDialogが表示されます。非同期タスクが終了すると、onPostExecuteメソッドのMainActivityへのインテントが開始されます。Volleyを使ってAndroidにログインする方法は?

私の質問に:非同期タスクでボレーリクエストを行うのは良い考えですか、それとももっと良い解決策がありますか?

ありがとうございました。

+0

Volleyはhttpコールを非同期的に処理します。なぜあなたはAsyncTaskに入れますか? – Christine

答えて

0

asynctaskを使用することはできません。それについてのボレーケア。データと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); 
} 

1点 は次のようになります。 jsonでユーザー名を送信しないでください。ヘッダーのparamとして送信します。このapplication/x-www-form-urlencodedを使用し、ヘッダーのparamsとしてユーザー名を渡すように設定します。

更新: これで動作します。私は急いでそれを書いて申し訳ありません。 Article about how callback work

+0

ありがとうございました。私は "requestQueue = Volley.newRequestQueue(mContext、DownloadCallbackコールバック)"という行に問題があります。 - "シンボルコールバックを解決できません"と表示されます。私を助けてくれますか? – flo

関連する問題