无法从Async Task访问变量

时间:2016-04-15 20:01:12

标签: android android-asynctask global-variables

我是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)的正确值。当我第一次访问时出现问题。

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

请帮忙。 感谢。

1 个答案:

答案 0 :(得分:0)

如果不知道你的流动在哪里/什么以及如何流动,很难分辨出来?

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

*

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

并将您的异步任务称为新的VAsyncTask(cc).execute(&#34;&#34;);

这是更安全的方法。