【问题标题】:Cannot access variables from Async Task无法从异步任务访问变量
【发布时间】:2016-04-15 20:01:11
【问题描述】:

我是android新手。我花了太多时间解决这个问题,但没有成功。

所以我有服务Serv.java

public class Serv extends Service {
private String a = "aa";
private String b = "bb";
private String c = "100";

//called by some class.
public void setcc(String s) {
c=s;//c="cc"
}

//Using alarm manager to start the service.
//I call function callMe from OnStart.

void callMe(Context context){ 
//which calls an async task
new VAsyncTask().execute("");
}

private class VerifyCPIAsyncTask  extends AsyncTask<String, Void, Void> {

    protected void onPreExecute() {

    }

    protected Void doInBackground(String... urls) {
    //I am able to access a and b.(aa and bb)
    //but not c.(It still shows 100 and not cc)
    }
    ........
   }

但是当我再次运行相同的服务时,它显示 c(cc) 的正确值。我第一次访问时出现问题。

编辑-如果我将私有字符串 c 设置为私有静态字符串 c,则流程可以正常工作。 而且我已经在我的 onCreate 和 onStartCommand 中放置了日志。它们不打印变量 c 的最新值。所以没有用传递(最新)变量 c 来预执行甚至在 aysnctask 中创建构造函数(因为我仍然得到旧的变量 c) 的值。

请帮忙。 谢谢。

【问题讨论】:

  • 为什么你不能在Asynctask 中使用Preexecute 方法设置你想要的参数?
  • 在不了解过程并了解您如何利用一切的情况下,我只能假设这是竞争条件或其他东西。
  • 嗨,你能看看这个link

标签: android android-asynctask global-variables


【解决方案1】:

如果不知道您的流程来自哪里/什么以及如何,很难分辨?

您可以覆盖构造函数并将值作为异步任务参数传递。

*

private class VerifyCPIAsyncTask  extends AsyncTask<String, Void, Void>
 {
    int cc
    VerifyCPIAsyncTask (int a) {
       cc= a;
     }
    protected void onPreExecute() {
    }
}*

并将您的异步任务称为 new VAsyncTask(cc).execute("");

这是更安全的方法。

【讨论】:

  • 嗨,你能看看这个link
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多