gpt4 book ai didi

java - 异步后执行

转载 作者:行者123 更新时间:2023-12-01 12:29:01 25 4
gpt4 key购买 nike

我已经能够在我的套接字服务器(在 ruby​​ 上运行)和我的客户端(一个 Android(java) 应用程序)之间建立连接。我将解释我的目标是什么。

我必须通过套接字向我的服务器发送一个字符串。根据字符串的内容,服务器将在数据库中执行一个进程(存储、删除、查看数据等)。

第一个选项是验证用户名/密码。我能够发送正确的字符串,服务器接收它并用正确的响应回复给我(在验证我的用户名是否能够登录应用程序之后)。现在,根据此响应,我需要将当前 Activity (loginActivity) 更改为下一个 Activity (MenuActivity),以便用户可以继续使用应用程序菜单。

由于套接字必须在 UIThread 之外的不同线程上运行,因此我使用 AsyncTask 方式运行它。但是,我在 AsyncTask 进程结束后触发 Activity 更改时遇到问题。

我正在做的是,在整个异步任务完成后(onPostExecute方法),我尝试调用该 Activity ,但它不起作用。这是我尝试过的(基于我在研究过程中发现的类似案例):

(AsyncTask类)

Context context;
private void AppContext(Context context) {
this.context = context.getApplicationContext();
}

OnPost执行

Intent NewActivity = new Intent();
NewActivity.setClass(context.getApplicationContext(),MainActivity.class);
context.startActivity(NewActivity);

但是这不起作用,导致我的应用程序因“线程因未捕获的异常而令人兴奋”而崩溃

我尝试只显示一条显示“已授予”或“已拒绝”的 Toast 消息,只是为了用更简单的任务来测试它,但我不断收到相同的错误,所以我假设它与处理之间的更改有关运行异步任务的线程和 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)

最佳答案

好的,我找到了一个解决方法,现在我想听听你们的意见,如果你们认为这是一个合适的解决方案。

由于问题是我的 AsyncTask 类中的上下文为空,因此我决定从应用程序启动的那一刻起就将值加载到变量上。

context = this.getApplicationContext(); 
new SocketReception().setContext(context);

在我的 SocketReception 类上,我有一个 setContext(context) 方法。

public void setContext(Context context) 
{
SocketReception.appContext= context;
};

现在,在我的 AsyncTask post.execute 上,我这样调用新 Activity :

SocketReception.appContext.startActivity(NewActivity);

它现在可以工作,但我想知道这是否是一种方便的方法,或者我是否应该继续寻找不同的解决方案。

P.S:我不得不添加不受欢迎的“FLAG_ACTIVITY_NEW_TASK”,稍后将研究如何避免这种情况。

关于java - 异步后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26101159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com