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
Volleyはhttpコールを非同期的に処理します。なぜあなたはAsyncTaskに入れますか? – Christine