我正在創建我的應用程序的用戶註冊部分。我正在使用AsyncTask
類在單獨的線程上處理此工作。我有我的AsyncTask
類在一個單獨的類文件。這在單獨的公共asyncTask類的活動中顯示錯誤消息
public class CreateAccountTask extends AsyncTask<String, Void, String>{
private ProgressDialog mpDialog;
private CreateAccountTask task;
private Context context;
private Activity activity;
private CreateAccount createAccount;
private AsyncTaskListener asyncTaskListener;
public CreateAccountTask(Activity activity, AsyncTaskListener asyncTaskListener){
this.activity = activity;
this.asyncTaskListener = asyncTaskListener;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
mpDialog = new ProgressDialog(activity);
//mpDialog.setTitle("Creating Account");
mpDialog.setMessage("Please wait.");
mpDialog.setCancelable(false);
mpDialog.setIndeterminate(false);
mpDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
//task.cancel(true);
mpDialog.dismiss();
}
});
mpDialog.show();
}
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
String fphoneNo = arg0[1];
String fpassword = arg0[0];
// create instance of the parseUser Class
ParseUser newUser = new ParseUser();
newUser.setUsername(fphoneNo);
newUser.setPassword(fpassword);
// here Check if progress dialog has been cancelled
if (!isCancelled()){
// if dialog has not been cancelled create the new user here
newUser.signUpInBackground(new SignUpCallback() {
@Override
public void done(ParseException e) {
// Something went wrong Sorry!
if(e != null){
if(!isCancelled()){
mpDialog.dismiss();
String errorMessage = e.getMessage().toString();
ErrorHappened(errorMessage);
}
else{
String errorMessage = "Registration Cancelled!";
ErrorHappened(errorMessage);
}
}
// No Problems
else {
if (!isCancelled()) {
// Wait for five seconds before starting the activity
//verifyingUser();
}
else {
String errorMessage = "Registration Cancelled2!";
ErrorHappened(errorMessage);
//Delete user in background
ParseUser currentUser = ParseUser.getCurrentUser();
if (currentUser != null) {
currentUser.deleteInBackground();
}
}
}
}
});
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
asyncTaskListener.onTaskComplete(result);
}
private void ErrorHappened(String errorMessage) {
Crouton CreateMagic = Crouton.makeText(createAccount, errorMessage, CroutonClass.ALERT);
CreateMagic.setConfiguration(CroutonClass.configure);
CreateMagic.show();
}
}
在我onPreExecute
的方法,我開始progressDialog,顯示在正在執行的後臺任務。雖然在我的doInBackground
方法我有我得到用戶在主要活動提供的用戶名和密碼,並註冊用戶。這是我的問題開始的地方,如果在用戶註冊過程中發生錯誤,我想使用Crouton(烤麪包機的冷卻器版本)通知用戶此錯誤。但是,當應用程序到達用於顯示錯誤的點時,該應用程序會崩潰。
我的問題是:
- 如何顯示在我的活動錯誤消息? 2.
這裏是我的活動:
public class CreateAccount extends ActionBarActivity implements AsyncTaskListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_account);
mPassWord = (EditText) findViewById(R.id.password);
mcreateAccount = (Button) findViewById(R.id.createAcct);
mPhoneNumber = (EditText) findViewById(R.id.Phone_Number);
// create account Method
createAccount();
}//end of on create.
public void createAccount() {
mcreateAccount.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
CreateAccountTask newTask = new CreateAccountTask(CreateAccount.this, new CreateAccount());
newTask.execute(passwordString, fpartphoneNo);
});
}
private void verifyingUser() {
}
private void shitHappened(String errorMessage) {
// TODO Auto-generated method stub
Crouton CreateMagic = Crouton.makeText(this, errorMessage, CroutonClass.ALERT);
CreateMagic.setConfiguration(CroutonClass.configure);
CreateMagic.show();
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
Crouton.cancelAllCroutons();
super.onBackPressed();
}
@Override
public void onTaskComplete(String result) {
// TODO Auto-generated method stub
}
}
你不能內doInBackground做UI相關的工作()嘗試runOnUIThread或處理與UI工作。 – SathishKumar
@sathish請不要理解。你能否用一個例子來解釋一下。 – KingBryan