Tengo dos clases, MainActivity y Tempo y sus códigos.
MainActity.java
public class MainActivity extends AppCompatActivity { Tempo m_context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); m_context = Tempo.getInstance(); } } public void button_clicked(View v){ if( m_context.connect("a1",1)){ setTitle("Yeah!"); }else { setTitle("No"); } }y tempo.java
public class Tempo{ public boolean isConnected=false; private static Tempo insta; private Tempo() { } public synchronized static Tempo getInstance() { if (insta == null) { insta = new Tempo(); } return insta; } public boolean connect(String a, int aa) { new DoTask().execute(a); return isConnected; } public class DoTask extends AsyncTask<String,Void,Boolean> { @Override protected Boolean doInBackground(String... params) { boolean result = true; try { //If I'm here everything is okay } catch (IOException e) { //If I'm here everything is !okay result = false; } return result; } @Override protected void onPostExecute(Boolean result) { isConnected = result; } } }Aunque mi trabajo se realiza perfectamente dentro de Tempo, lo que significa que las variables booleanas en la clase Tempo "resultado" y "isConnected" deben ser verdaderas. Sin duda, se transformaron a True después de mi trabajo, pero el problema principal es usar esos vars, no puedo ingresar si bloque de MainActivity ... lo que cambiará mi título a "¡Sí!". Según yo, se debe a que AsyncTask lanzó una tarea en segundo plano, por lo que mis vars siguen siendo los mismos (falsos) durante un tiempo en particular.
Bueno, necesito AsyncTask para que la interfaz de usuario no se atasque.
onPostExecute se ejecuta en el subproceso de la interfaz de usuario. para que pueda actualizar la interfaz de usuario en este método en lugar de su MainActivity.
public class Tempo{ Activity activity; public boolean isConnected=false; private static Tempo insta; private Tempo() { } public synchronized static Tempo getInstance() { if (insta == null) { insta = new Tempo(); } return insta; } public boolean connect(String a, int aa,Activity a) { this.activity= a; new DoTask().execute(a); return isConnected; } public class DoTask extends AsyncTask<String,Void,Boolean> { @Override protected Boolean doInBackground(String... params) { boolean result = true; try { //If I'm here everything is okay } catch (IOException e) { //If I'm here everything is !okay result = false; } return result; } @Override protected void onPostExecute(Boolean result) { if( result){ Activity.setTitle("Yeah!"); }else { Activity.setTitle("No"); } } } }Entonces, como puede ver, paso la actividad como un parámetro y luego la uso para actualizar la interfaz de usuario en el método onPostExecute().