Я прочитал несколько постов о том, как я могу вызвать активность Android из другого Java-класса, реализованного в приложении, но ответа на мою проблему нет.
У меня есть класс соединения (Connection.java
), который обрабатываетпостоянное соединение, необходимое для приложения.Этот сконструирован с использованием шаблона Singleton, поэтому каждый раз, когда мне нужна информация о соединении или я запрашиваю что-то, что я делаю:
final Connection conn = Connection.getConnection(getApplicationContext());
//... Some Code Here
conn.methodDoSomethingA();
Затем у меня есть TabActivity, которое содержит 5 действий (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);
}
}
Теперь у меня есть открытый метод в классе соединения для завершения соединения - endConnection()
- который вызывается несколько раз в классе соединения, например, когда есть время ожидания гнезда или при получениипользовательское сообщение от сервера, информирующее о завершении сеанса.
Проблема начинается здесь - когда вызывается endConnection()
, он должен закрыть сокеты и затем показать Activity (Theme.Dialog), сообщающий, что соединение потеряно.Чтобы добиться этого, я сделал это безуспешно:
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 );
}
}
Я также попытался передать контекст TabActivity
в качестве аргумента классу Connection.java
и использовал его вместо appContext
, но безлибо успех.
Я получаю следующие ошибки:
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
Другими словами: - Как запустить Activity из класса Java?!