¿Cuál es el propósito de la declaración de devolución en doInBackground () de ASynctask?

Este aspecto de mi sistema de inicio de sesión funciona muy bien si tengo la declaración de devolución establecida en 0 o 1, pero falla si utilizo null. Esto es todo adaptado de http://256design.com/blog/android-login-asynctask/ donde esta vuelta particular mira como se enumera debajo de mi propio código.

public LoginTask(Polling activity, ProgressDialog progressDialog) { this.activity = activity; this.progressDialog = progressDialog; } protected Integer doInBackground(String... arg0) { EditText userName = (EditText)activity.findViewById(R.id.emailEditText); EditText passwordEdit = (EditText)activity.findViewById(R.id.passEditText); String email = userName.getText().toString(); String password = passwordEdit.getText().toString(); UserFunctions userFunction = new UserFunctions(); JSONObject json = userFunction.loginUser(email, password); progressDialog.dismiss(); // check for login response //Log.v("test", Integer.toString(jsonParser.getResponseCode())); try { if (json.getString(KEY_SUCCESS) != null) { //loginErrorMsg.setText(""); //loginFragment.loginErrorMsg.setText("Success"); String res = json.getString(KEY_SUCCESS); if(Integer.parseInt(res) == 1){ //user successfully logged in // Store user details in SQLite Database DatabaseHandler db = new DatabaseHandler(activity.getApplicationContext()); JSONObject json_user = json.getJSONObject("user"); //Log.v("name", json_user.getString(KEY_NAME)); // Clear all previous data in database userFunction.logoutUser(activity.getApplicationContext()); db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT)); // Close Login Screen //finish(); //loginErrorMsg = (TextView)activity.findViewById(R.id.loginErrorMsg); //loginErrorMsg.setText("logged in"); //passwordEdit.setText(""); }else{ // Error in login //progressDialog.setMessage("Incorrect username or password"); //loginErrorMsg.setText("Incorrect username/password"); } } } catch (NullPointerException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return 1; } 

El tutorial que he utilizado, eche un vistazo a responseCode:

 protected Integer doInBackground(String... arg0) { String result = ""; int responseCode = 0; try { HttpClient client = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://www.256design.com/projectTransparency/project/headerLogin.php"); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("emailAddress", arg0[0])); nameValuePairs.add(new BasicNameValuePair("password", arg0[1])); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); int executeCount = 0; HttpResponse response; do { progressDialog.setMessage("Logging in.. ("+(executeCount+1)+"/5)"); // Execute HTTP Post Request executeCount++; response = client.execute(httppost); responseCode = response.getStatusLine().getStatusCode(); // If you want to see the response code, you can Log it // out here by calling: // Log.d("256 Design", "statusCode: " + responseCode) } while (executeCount < 5 && responseCode == 408); BufferedReader rd = new BufferedReader(new InputStreamReader( response.getEntity().getContent())); String line; while ((line = rd.readLine()) != null) { result = line.trim(); } id = Integer.parseInt(result); } catch (Exception e) { responseCode = 408; e.printStackTrace(); } return responseCode; } 

El propósito es pasar el resultado de su trabajo (que se ejecuta en un subproceso de trabajo) a onPostExecute , para procesar el resultado en el subproceso de UI. Esto es necesario si desea actualizar la interfaz de usuario en respuesta a una ejecución de trabajo exitosa.

DoInBackground devuelve el valor al método postExecute y el paso de null no valida la condición:

 if(headerCode == 202) activity.login(id); 

Sí, es el valor que envías a postExecute :

http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result )

protected void onPostExecute (Resultado del resultado)

Se ejecuta en el subproceso de interfaz de usuario después de doInBackground (Params …).

El resultado especificado es el valor devuelto por doInBackground (Params …).

Este método no se invocará si la tarea se canceló.

Parámetros: resultado El resultado de la operación calculado por doInBackground (Params …).

 protected class InitTask extends AsyncTask<Context, Integer, Integer> 

En la línea anterior definimos nuestra subclase y los tres parámetros que se pasarán a las devoluciones de llamada. Las devoluciones de llamada tienen este aspecto:

doInBackground ()

 @Override protected Integer doInBackground( Context... params ) { return super.doInBackground( params ) } 

Cualquier cosa procesada en este método se maneja en un hilo sperate. Tenga en cuenta que el tipo de datos del valor devuelto es un entero y corresponde al tercer parámetro del tipo en la definición de clase. Este valor devuelto de este método se pasa al método onPostExecute () cuando se completa este subproceso .

Y si pasas null a cambio entonces falla la condición en el método onPostExecuted()

  • Conceptos básicos de Android: ejecutar código en el subproceso de la interfaz de usuario
  • Cómo crear un cuadro de diálogo modal en android
  • ¿Por qué llamar a setScaleX durante el gesto de pinch zoom causa parpadeo?
  • Ver fuera de los límites de un cuadro de diálogo
  • Vista de lista con elementos de vista personalizados con superposiciones parciales (Android)
  • Cómo terminar la actividad de los padres de la actividad infantil
  • Ejemplos de Fragmentos de Android
  • Cómo hacer que el segundo fragmento se solape en el primer fragmento mientras que la transición del fragmento
  • Mostrar iconos en el menú de opciones al usar Theme.Holo
  • Tono de cambio de imagen de Android para simular el botón de clic
  • Cómo habilitar marcadores de selección para EditText en PopupWindow?
  • Interesting Posts
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.