studio programacion herramientas fundamentos crear con avanzado aplicaciones android view android-asynctask progressdialog

programacion - manual android studio avanzado



Solo el hilo original que creó una jerarquía de vista puede tocar sus vistas ERROR (2)

Usted hace algo de trabajo de IU en su doInBackground , por ejemplo esta llamada

rAuth.setTextColor(Color.GREEN);

Mueva este código al método onPostExecute .

Todo funciona, excepto cuando llega hasta la última parte del código con "¡Registrado con éxito!" entonces aparece el error como se menciona en el título dentro de la parte del mensaje registerDialog.

¿Algo estoy haciendo mal? ¿Alguien puede ayudarme a verificar mi código?

Muchas gracias.

La aplicación no se colgó, solo salió de la página principal de la aplicación. y si presiono el botón de registrar nuevamente, volverá con el mismo error.

private void setRegister (Botón b) {b.setOnClickListener (new View.OnClickListener () {

private AsyncTask<String, Void, String> task2; public void onClick(View v) { // TODO Auto-generated method stub registerDialog = new AlertDialog.Builder(Login.this).create(); registerDialog.setTitle("Register Alert!"); registerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Back", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub registerDialog.dismiss(); } }); task2 = new AsyncTask<String, Void, String>() { ProgressDialog dialog2; ArrayList<NameValuePair> postParameters2; String response2 = null; @Override protected void onPreExecute() { postParameters2 = new ArrayList<NameValuePair>(); postParameters2.add(new BasicNameValuePair("usernamelog", rUsername.getText().toString())); postParameters2.add(new BasicNameValuePair("passwordlog", rPassword.getText().toString())); postParameters2.add(new BasicNameValuePair("rpasswordlog", rRpassword.getText().toString())); postParameters2.add(new BasicNameValuePair("emaillog", rEmail.getText().toString())); postParameters2.add(new BasicNameValuePair("phonenumlog", rPhoneNum.getText().toString())); postParameters2.add(new BasicNameValuePair("doblog", rBirthday.getText().toString())); postParameters2.add(new BasicNameValuePair("genderlog", rGender.getText().toString().toUpperCase(Locale.ENGLISH))); dialog2 = new ProgressDialog(Login.this, ProgressDialog.STYLE_SPINNER); dialog2.setMessage("Registering..."); dialog2.show(); } @Override protected String doInBackground(String... params) { try { response2 = CustomHttpClient.executeHttpPost("http://whatstherex.info/checkR.php", postParameters2); String res2 = response2.toString(); res2 = res2.replaceAll("null", ""); if (res2.equals("1")) { res2 = "Successfully Registered!"; rAuth.setTextColor(Color.GREEN); return res2; } else { res2 = res2.toString(); rAuth.setTextColor(Color.RED); return res2; } } catch (Exception e) { res2 = e.toString(); rAuth.setTextColor(Color.BLACK); return res2; } } @Override protected void onPostExecute(String result2) { if(!result2.equals("Successfully Registered!") && !result2.equals("Username have to be at least 5 characters") && !result2.equals("Password have to be at least 8 characters") && !result2.equals("Passwords does not match") && !result2.equals("Email field is empty") && !result2.equals("Email field is not valid") && !result2.equals("Phone number Field is empty") && !result2.equals("Phone number is not numeric") && !result2.equals("Phone number is not 8 digit") && !result2.equals("Birthday Field is empty") && !result2.equals("Birthday is not numeric") && !result2.equals("Birthday is not in DDMMYYYY format") && !result2.equals("Gender Field is empty") && !result2.equals("Gender Field is invalid") && !result2.equals("Gender not in the format M or F") && !result2.equals("Duplicate entry ''"+rUsername.getText().toString()+"'' for key ''username''") && !result2.equals("Duplicate entry ''"+rEmail.getText().toString()+"'' for key ''email''") && !result2.equals("Duplicate entry ''"+rPhoneNum.getText().toString()+"'' for key ''phoneNum''")){ rAuth.setText("Unknown Error!!!"); rAuth.setTextColor(Color.BLUE); registerDialog.setMessage(result2); registerDialog.show(); dialog2.dismiss(); }else if (result2.equals("Duplicate entry ''"+rUsername.getText().toString()+"'' for key ''username''")) { rAuth.setText("Username already in used"); rAuth.setTextColor(Color.RED); registerDialog.setMessage("Username already in used"); registerDialog.show(); dialog2.dismiss(); }else if (result2.equals("Duplicate entry ''"+rEmail.getText().toString()+"'' for key ''email''")) { rAuth.setText("Email already in used"); rAuth.setTextColor(Color.RED); registerDialog.setMessage("Email already in used"); registerDialog.show(); dialog2.dismiss(); }else if (result2.equals("Duplicate entry ''"+rPhoneNum.getText().toString()+"'' for key ''phoneNum''")){ rAuth.setText("Phone number already in used"); rAuth.setTextColor(Color.RED); registerDialog.setMessage("Phone number already in used"); registerDialog.show(); dialog2.dismiss(); }else { rAuth.setText("Successfully Registered!"); rAuth.setTextColor(Color.GREEN); registerDialog.setMessage("Successfully Registered!"); registerDialog.show(); dialog2.dismiss(); } } }; task2.execute(); } }); }


Supongo que rAuth es un TextView . Esto debe moverse a onPostExecute() ya que no puede actualizar elementos de UI en doInBackground() . Solo onPostExecute() , onProgressUpdate() y onPreExecute() ejecutan en el subproceso de la UI .

Aquí está el enlace a Docs