【问题标题】:Why is my global variable not initialized after AsyncTask为什么我的全局变量在 AsyncTask 之后没有初始化
【发布时间】:2013-12-23 18:45:35
【问题描述】:

我的班级中有一个名为String authToken 的全局变量。在这个类中,我有一个如下所示的 AsyncTask 和设置全局变量的 onPostExecute 方法。

class AuthToken extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... args) {
        MyAccount myAccount = new MyAccount(getApplicationContext());
        return myAccount.getAuthToken();
    }
    @Override
    protected void onPostExecute(String fetchedToken) {
        authToken = fetchedToken; //assign it to global variable
        Log.d("Inside token: ", authToken);
    }
}

我这样称呼它:

new AuthToken().execute();
Log.d("authToken: ", authToken+""); //print the fetched token

出于某种原因,即使onPostExecute 中的日志消息显示了 authToken,但在调用 execute() 之后,当我打印 authToken 时......它什么也没打印:

所以在我的日志中我看到:

D/Inside token:﹕ 75e7d526-d0eb-4cb2-b294-a57e5dc2e5e4
D/authToken:  ]

问题

为什么我的全局变量没有在onPostExecute 之后设置?

【问题讨论】:

    标签: java android android-asynctask android-activity


    【解决方案1】:

    日志不会打印任何内容,因为您的 asynctask 在到达日志行时尚未完成。所以你什么也看不见。

    你的变量正在被设置

    AsyncTask 启动一个新线程,因此在它执行new AuthToken().execute(); 之后它会记录日志。如果它在打印日志之前等待异步任务完成,它将破坏异步任务的目的

    【讨论】:

    • 我明白了。但是,我又该如何做这样的事情:在我的主要活动中,我想获取 authToken 并且在获取它之后我想查看它是否已设置(使用if 条件)。如果是 - 然后继续,如果不是 - 然后显示日志不活动。 ....
    • 用你的令牌在你的onPostExecute 中做任何你想做的事情,这是知道你的任务何时完成的唯一方法。设置回调或其他内容以指示您是否在 onPostExecute 中获得令牌
    猜你喜欢
    • 2014-08-23
    • 2016-10-03
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多