gpt4 book ai didi

java - 在执行其他代码之前如何完成 AsyncTask

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

(抱歉英语不好)..我有一个异步任务,它接受数据并返回一个字符串..但是数据在第二个日志出来后返回..

这是我的代码

if  (session.getSpMainKey() == null || Objects.equals(session.getSpMainKey(), "")){
Log.w("null", "yes");
g.execute(session.getId());
Log.w("maiKey", "yes");
}
try {
JSONObject j = new JSONObject(session.getSpMainKey());
} catch (Exception e) { e.printStackTrace(); }

这是日志:

08-21 18:58:59.583 30375-30375/ampersanda.hmmmm W/null: yes
08-21 18:58:59.583 30375-30375/ampersanda.hmmmm W/id ->: 561
08-21 18:58:59.621 30375-30375/ampersanda.hmmmm W/maiKey: yes
08-21 18:58:59.630 30375-574/ampersanda.hmmmm W/param sent ->: id=561

我认为 param sent ->: id=561 应该在 W/maiKey: yes 之前

之后,当我尝试将 String 转换为 JSONObject 时,我收到 java.lang.NullPointerException 消息,说我有一个空对象引用

这是异常日志

08-21 18:54:11.369 28295-28295/ampersanda.hmmmm W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at org.json.JSONTokener.nextValue(JSONTokener.java:94)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at org.json.JSONObject.<init>(JSONObject.java:156)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at org.json.JSONObject.<init>(JSONObject.java:173)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at ampersanda.elsys.MainActivity.onCreate(MainActivity.java:66)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.app.Activity.performCreate(Activity.java:5976)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.app.ActivityThread.access$800(ActivityThread.java:144)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.os.Looper.loop(Looper.java:135)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5221)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at java.lang.reflect.Method.invoke(Native Method)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
08-21 18:54:11.373 28295-28295/ampersanda.hmmmm W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)

最佳答案

AsyncTask 主要目的是在后台运行而不干扰主线程。您不能相信该序列在调用 AsyncTask 的执行后立即执行任何任务。

将从 String 到 JSONObject 的转换放入 AsyncTaskonPostExecute() 方法

protected void onPostExecute(String result) {

try {
JSONObject j = new JSONObject(session.getSpMainKey());
} catch (Exception e) { e.printStackTrace(); }

}

更多阅读AsyncTask

关于java - 在执行其他代码之前如何完成 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064096/

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