Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从异步任务访问变量_Android_Android Asynctask_Global Variables - Fatal编程技术网

Android 无法从异步任务访问变量

Android 无法从异步任务访问变量,android,android-asynctask,global-variables,Android,Android Asynctask,Global Variables,我是android新手。我花了太多时间解决这个问题,但没有成功 所以我有serviceServ.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

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

所以我有service
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)
    }
    ........
   }
公共类服务扩展服务{
私有字符串a=“aa”;
私有字符串b=“bb”;
专用字符串c=“100”;
//被某个班级叫来的。
公共void setcc(字符串s){
c=s;//c=“cc”
}
//使用报警管理器启动服务。
//我从OnStart调用函数callMe。
void callMe(上下文){
//它调用异步任务
新建VAsyncTask().execute(“”);
}
私有类VerifyCPIsyncTask扩展了AsyncTask{
受保护的void onPreExecute(){
}
受保护的Void doInBackground(字符串…URL){
//我可以访问a和b。(aa和bb)
//但不是c(它仍然显示100而不是cc)
}
........
}
但是当我再次运行同一个服务时,它显示了c(cc)的正确值。当我第一次访问时出现了问题

编辑-如果我将私有字符串c转换为私有静态字符串c,则流可以正常工作。 我已经在onCreate和onStart命令中添加了日志。它们不会打印变量c的最新值。因此,传递(最新)变量c来预执行甚至在AYSNTASK中创建构造函数是没有用的(因为我仍然获得变量c的旧值)

请帮忙。
谢谢。

如果不知道您的流量来自何处/何处以及如何,很难判断您的流量

您可以重写构造函数并将值作为异步任务参数传递

*

私有类VerifyCPIAncySyncTask扩展了AsyncTask
{
int cc
验证CPIsyncTask(int a){
cc=a;
}
受保护的void onPreExecute(){
}
}*
并将异步任务称为new VAsyncTask(cc)


这是一种更安全的方法。

为什么你不能在
异步任务中使用
预执行
方法来设置你想要的参数呢请看一下这个
private class VerifyCPIAsyncTask  extends AsyncTask<String, Void, Void>
 {
    int cc
    VerifyCPIAsyncTask (int a) {
       cc= a;
     }
    protected void onPreExecute() {
    }
}*