내 서비스에서 서비스의 doInBackground() 메소드 내에서 http://loopj.com/android-async-http/ 을 사용하고 있습니다. 그것은 비동기이기 때문에 콜백이 호출되기 전에 메소드가 끝나기 때문에 onPostExecute가 호출되고 서비스가 종료됩니다 ... 어떻게 이것을 피할 수 있습니까?안드로이드 서비스 내에서 비동기식 요청하기
public class LoginService extends AsyncTask<String, Void, LoginService.LoginStatus> {
private static String TAG = "x-LoginService";
private ProgressDialog progressDialog;
private AlertDialog dialog = null;
private final Context context;
public LoginService(Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(context, "", context.getString(R.string.waitingLogin), true);
}
@Override
protected void onPostExecute(LoginStatus loginStatus) {
progressDialog.dismiss();
Log.d(TAG, "--STARTONPOSTEXECUTE");
String message;
LocalSettingsService settings = new LocalSettingsService(context);
if (loginStatus == LoginStatus.LOGGED_IN) {
settings.put("loggedIn", "true");
Intent intent = new Intent(context, FragmentTabs.class);
context.startActivity(intent);
//Intent intent = new Intent(context, SummaryPage.class);
//Intent intent = new Intent(context, FeedbackPage.class);
//Intent intent = new Intent(context, NavTab.class);
//context.startActivity(intent);
return;
} else if (loginStatus == LoginStatus.INVALID_CREDENTIALS) {
settings.put("loggedIn", "false");
message = context.getString(R.string.invalidCredentials);
} else {
settings.put("loggedIn", "false");
message = context.getString(R.string.serverError);
}
dialog = new AlertDialog.Builder(context)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(context.getString(R.string.errorTitle))
.setMessage(message)
.setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
}).create();
dialog.show();
}
@Override
protected LoginStatus doInBackground(String... strings) {
String username = strings[0];
String password = strings[1];
doLogin();
return LoginStatus.LOGGED_IN;
}
private void doLogin() {
{
Log.d(TAG, "--STARTDOLOGIN");
RequestParams params = new RequestParams();
params.put("username", "un");
params.put("password", "pw");
ServicesRestClient.post("ajax/login", params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(String s) {
Log.d(TAG, "--ONSUCCESS");
}
@Override
public void onFailure(Throwable throwable, String s) {
Log.d(TAG, "--ONFAILURE");
}
});
}
}
public void onPause() {
if (dialog != null) {
dialog.dismiss();
}
}
public static enum LoginStatus {
LOGGED_IN, INVALID_CREDENTIALS, SERVER_SIDE_ERROR
}
}
코드 표시 ... –
죄송합니다. 완료 ..... – Baconbeastnz