我已经能够在我的套接字服务器(在ruby上运行)和我的客户端(它是一个Android(Java)应用程序)之间建立连接。我会解释我的目标是什么。Async PostExecute
我必须通过套接字发送一个字符串到我的服务器。根据字符串的内容,服务器将在数据库中执行一个进程(存储,删除,查看数据等)。
第一个选项是验证用户名/密码。我能够发送正确的字符串,并且服务器收到它并用正确的响应回复给我(在验证我的用户名是否能够登录到应用程序之后)。现在,根据这个响应,我需要使用下一个活动(MenuActivity)更改当前活动(loginActivity),以便用户可以继续使用应用程序菜单。
由于套接字必须在除UIThread之外的其他线程上运行,所以即使使用AsyncTask方式运行它。然而,即使在AsyncTask过程结束后触发活动改变的问题仍然存在。
即时通讯工作是在整个异步任务完成后(onPostExecute方法)即时通讯尝试调用活动,但它不工作。这是我试过(基于类似的情况下,我一直在研究过程中发现的):
(的AsyncTask类)
OnPostExecute
Intent NewActivity = new Intent();
NewActivity.setClass(context.getApplicationContext(),MainActivity.class);
context.startActivity(NewActivity);
但是这是不工作及其导致我的应用崩溃与“未使用的异常令人兴奋”线程
我试着只显示说“授予”或“拒绝”的Toast消息只是为了测试一个更简单的任务,但我仍然得到相同的错误,所以即时通讯假设它处理Async任务正在运行的线程和UI线程之间的变化。有任何想法吗?
P.S:我检查了与我的类似的其他问题,并尝试了建议的代码,但没有任何结果。
错误日志
09-29 09:59:11.387: E/AndroidRuntime(2856): FATAL EXCEPTION: main
09-29 09:59:11.387: E/AndroidRuntime(2856): java.lang.NullPointerException
09-29 09:59:11.387: E/AndroidRuntime(2856): at com.example.prescoterm.SocketClass.onPostExecute(SocketClass.java:111)
09-29 09:59:11.387: E/AndroidRuntime(2856): at com.example.prescoterm.SocketClass.onPostExecute(SocketClass.java:1)
09-29 09:59:11.387: E/AndroidRuntime(2856): at android.os.AsyncTask.finish(AsyncTask.java:602)
09-29 09:59:11.387: E/AndroidRuntime(2856): at android.os.AsyncTask.access$600(AsyncTask.java:156)
09-29 09:59:11.387: E/AndroidRuntime(2856): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
09-29 09:59:11.387: E/AndroidRuntime(2856): at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 09:59:11.387: E/AndroidRuntime(2856): at android.os.Looper.loop(Looper.java:137)
09-29 09:59:11.387: E/AndroidRuntime(2856): at android.app.ActivityThread.main(ActivityThread.java:4424)
09-29 09:59:11.387: E/AndroidRuntime(2856): at java.lang.reflect.Method.invokeNative(Native Method)
09-29 09:59:11.387: E/AndroidRuntime(2856): at java.lang.reflect.Method.invoke(Method.java:511)
09-29 09:59:11.387: E/AndroidRuntime(2856): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-29 09:59:11.387: E/AndroidRuntime(2856): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-29 09:59:11.387: E/AndroidRuntime(2856): at dalvik.system.NativeStart.main(Native Method)
从你正在使用来自服务,活动或来自类 – 2014-09-29 13:39:45
的异步任务我有一个名为SocketClass的类。在我的登录活动中,当我点击“提交”按钮时,这就是我的异步任务启动的地方:new SocketClass()。execute((“@ | 01 |”+ user +“|”+ password).split(“\\ |“)); – 2014-09-29 13:42:28
为什么ru把所有的东西放在postexecute.Do在后台执行webservice调用,并在post执行中调用actvity,并且使用上下文,就像你从构造函数中获得的一样,不需要调用context.getApplcationContext() 。 – 2014-09-29 13:45:25