ユーザー名とパスワード用の2つのテキストフィールドとログインボタンを備えたLoginActitvityがあります。ユーザーがボタンを押すと、アプリは非同期タスクを開始します。非同期タスクは私のVolleyHandlerを実装します。ログインパラメータが正しいかどうかをチェックし、いくつかのユーザーデータをフェッチします(volleyとjsonを使用)。これを実行している間、ProgressDialogが表示されます。非同期タスクが終了すると、onPostExecuteメソッドでMainActivityへのインテントが開始されます。
さて、私の質問です。非同期タスクでボレーリクエストを行うのは良い考えですか、それともより良い解決策がありますか?
ありがとう。
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としてユーザー名を渡すように設定します。
更新:これで動作します。すみません、急いで書きました。コールバックの仕組みに関する記事
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加