Android 无法从异步任务访问变量
我是android新手。我花了太多时间解决这个问题,但没有成功 所以我有serviceAndroid 无法从异步任务访问变量,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
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() {
}
}*