我是安卓系统的新手。我花了太多时间来解决这个问题,但没有成功。
所以我有服务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)的正确值。当我第一次访问时出现了问题。
EDIT-如果我将private字符串c设置为private静态字符串c,则流运行良好。我已经在onCreate和onStartCommand中放了日志。它们不打印变量c的最新值。所以传递(最新的)变量c来预先执行甚至在aysnctask中创建构造函数是没有用的(因为我仍然得到变量c的旧值)。
请帮忙。谢谢
如果不知道你的流在哪里/什么以及如何,很难判断?
您可以重写构造函数并将值作为async任务参数传递。
*
private class VerifyCPIAsyncTask extends AsyncTask<String, Void, Void>
{
int cc
VerifyCPIAsyncTask (int a) {
cc= a;
}
protected void onPreExecute() {
}
}*
并将您的异步任务调用为new VAsyncTask(cc).exexecute(");
这是一种更安全的方法。