Java 无法引用在封闭范围中定义的非最终局部变量jSONString
我试图在60秒后将JSON字符串传递给服务器。当我试图从一个线程执行MyAsyncTask时,我面临着一个问题;jSONString在此行不可访问new MyAsyncTask.executejSONString;我发现这个错误不能引用在封闭范围内定义的非最终局部变量jSONString 这部分代码是从MainActivity内部类中的onLocationChanged方法调用的: PostData类:Java 无法引用在封闭范围中定义的非最终局部变量jSONString,java,android,Java,Android,我试图在60秒后将JSON字符串传递给服务器。当我试图从一个线程执行MyAsyncTask时,我面临着一个问题;jSONString在此行不可访问new MyAsyncTask.executejSONString;我发现这个错误不能引用在封闭范围内定义的非最终局部变量jSONString 这部分代码是从MainActivity内部类中的onLocationChanged方法调用的: PostData类: public class PostData { String jSONString;
public class PostData {
String jSONString;
Handler handler = new Handler();
public PostData() {
super();
}
public String getjSONString() {
return jSONString;
}
public void setjSONString(String jSONString) {
this.jSONString = jSONString;
}
public void timer(String jSONString) {
this.jSONString = jSONString;
new Thread(new Runnable() {
@Override
public void run() {
boolean run = true;
while (run) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
new MyAsyncTask().execute(jSONString); //How can I access this variable'jSONString' here?
}
}, 5000);
}
}
}).start();
}
class MyAsyncTask extends AsyncTask<String, Integer, Void> {
@Override
protected Void doInBackground(String... params) {
System.out.println("The output of : doInBackground " +params[0]);
//the connection code.
return null;
}
}
}
使用PostData中声明的jSONString,当前正在尝试访问非最终的计时器方法参数:
public class PostData {
String jSONString;
Handler handler = new Handler();
public PostData() {
super();
}
public String getjSONString() {
return jSONString;
}
public void setjSONString(String jSONString) {
this.jSONString = jSONString;
}
public void timer(String jSONString) {
this.jSONString = jSONString;
new Thread(new Runnable() {
@Override
public void run() {
boolean run = true;
while (run) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
new MyAsyncTask().execute(jSONString); //How can I access this variable'jSONString' here?
}
}, 5000);
}
}
}).start();
}
class MyAsyncTask extends AsyncTask<String, Integer, Void> {
@Override
protected Void doInBackground(String... params) {
System.out.println("The output of : doInBackground " +params[0]);
//the connection code.
return null;
}
}
}
new MyAsyncTask().execute(PostData.this.jSONString);