¿Cómo iniciar una actividad desde una clase java?

He leído algunos mensajes sobre cómo podría llamar a una actividad de Android de otra clase Java implementado en la aplicación, pero no hay respuesta a mi problema.

Tengo una clase de la conexión ( Connection.java ) que maneja la conexión permanente necesitada por la aplicación. Éste se construye con el patrón Singleton, así que cada vez que necesito información de conexión o solicito algo que hago:

 final Connection conn = Connection.getConnection(getApplicationContext()); //... Some Code Here conn.methodDoSomethingA(); 

Entonces, tengo una TabActivity que contiene 5 Actividades (A, B, C, D, E):

 public class Tab extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab); final Connection conn = Connection.getConnection(getApplicationContext()); intent = new Intent().setClass(this, A.class); spec = tabHost.newTabSpec("A") .setIndicator("A", res.getDrawable(R.drawable.tab_A)) .setContent(intent); tabHost.addTab(spec); //... same for activities B, C, D and E tabHost.setCurrentTab(0); } } 

Ahora, tengo un método público en la clase Connection para terminar la conexión – endConnection() – que se llama varias veces dentro de la clase Connection, por ejemplo, cuando hay Socket Timeout o cuando se recibe un mensaje personalizado desde el servidor informando al final de la sesión.

El problema comienza aquí – cuando se llama endConnection() debe cerrar sockets y mostrar una actividad (Theme.Dialog) informando que la conexión se pierde. Para lograrlo hice esto, sin éxito:

 public class Connection { private static Connection connection = null; private Context appContext = null; private Connection(Context appContext) { this.appContext = appContext; } public static Connection getConnection(Context appContext) { if (connection == null) return connection = new Connection(appContext); else return connection; } public void endConnection() { // ... Close sockets and streams - SOME CODE HERE // Show Disconnect Dialog Intent myIntent = new Intent(appContext, Disconnect.class); myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); appContext.startActivity( myIntent ); } } 

También traté de pasar el contexto TabActivity como argumento a la clase Connection.java y lo usé en lugar de appContext , pero sin éxito tampoco.

Estoy recibiendo estos errores:

 W/dalvikvm(9449): threadid=3: thread exiting with uncaught exception (group=0x2aaca228) E/AndroidRuntime(9449): Uncaught handler: thread main exiting due to uncaught exception E/AndroidRuntime(9449): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.Disconnect}: java.lang.NullPointerException 

En otras palabras: – ¿Cómo iniciar una actividad de una clase de Java ?!

Encontré el error.

En primer lugar, quiero darles las gracias a todos por sus comentarios.

Aparentemente hice todo bien, y así es como se hace!

El error fue un error novato que me avergüenza:

El Disconnect.java tenía un oyente a un botón que no existía en su archivo de diseño XML de Content View, pero existe en otro diseño.

¡Nunca sospeché eso! Estúpido, ¿no ?!

Espero que este post pueda ayudar a todos por una de dos cosas:

  1. Llamar a una actividad de otra clase java ;
  2. ¡No publique preguntas sin explorar errores impensables!
  • Menú de opciones De fragmento en la barra de acción en android
  • Cómo hacer oval shape tabhost en android
  • Android API TabActivity deprecation
  • Android: configChanges parece ser ignorado
  • Problema de TabActivity de la interfaz de usuario de Android
  • ¿Cuál es la mejor manera de averiguar el número de pestañas en un TabActivity?
  • ¿Por qué TabActivity está obsoleta (razón)?
  • Androide. Cómo cambiar la actividad dentro de una pestaña
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.