我是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)的值。
请帮忙。 感谢。
答案 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;);
这是更安全的方法。