我看到了一些关于如何从另一个在应用程序中实现的Java类调用Android活动的帖子,但没有解决我的问题。
我有一个连接类(Connection.java
),它处理应用程序所需的永久连接。
这个类使用单例模式构建,因此每当我需要连接信息或请求某些内容时,我会执行以下操作:
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);
}
}
现在,我在Connection类中有一个公共方法来结束连接 -
endConnection()
- 在Connection类中多次调用,例如当套接字超时或从服务器接收到自定义消息通知要结束会话时。问题从这里开始 - 当调用
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
换句话说:如何从Java类启动Activity?!
getApplicationContext()
。 - Jorge