【发布时间】:2011-12-14 14:44:12
【问题描述】:
我阅读了一些关于如何从应用程序中实现的另一个 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 类中被多次调用,例如,当有 Socket Timeout 或从服务器接收到通知结束的自定义消息时会话。
问题从这里开始 - 当endConnection() 被调用时,它必须关闭套接字,然后显示一个通知连接丢失的活动(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?!
【问题讨论】:
-
你想要一个 Activity 表单 TabActivity 吗?
-
您是否在 Manifest 文件中声明了所有活动?请添加您遇到的错误的 StackTrace
-
@Ali 我想从 Connection 类(不是 Activity)中意图一个 Activity(应用程序中的任何位置)
-
@Houcine 所有活动都在清单文件中,如果我打算从另一个活动开始,我可以开始。
-
如果我没看错你的代码,appContext 在 newIntent(appContext...) 处将为空。通常,Android 应用程序中的网络通信是在 AsyncTask (或一些同样方便的异步处理实用程序,但通常可能是 AsyncTask )中处理的,其中包括启动它的 Activity 的回调机制(onPostExecute)。这样的模型是否适合您的目的?
标签: java android android-activity android-context tabactivity