Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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
Java 无法引用在封闭范围中定义的非最终局部变量jSONString_Java_Android - Fatal编程技术网

Java 无法引用在封闭范围中定义的非最终局部变量jSONString

Java 无法引用在封闭范围中定义的非最终局部变量jSONString,java,android,Java,Android,我试图在60秒后将JSON字符串传递给服务器。当我试图从一个线程执行MyAsyncTask时,我面临着一个问题;jSONString在此行不可访问new MyAsyncTask.executejSONString;我发现这个错误不能引用在封闭范围内定义的非最终局部变量jSONString 这部分代码是从MainActivity内部类中的onLocationChanged方法调用的: PostData类: public class PostData { String jSONString;

我试图在60秒后将JSON字符串传递给服务器。当我试图从一个线程执行MyAsyncTask时,我面临着一个问题;jSONString在此行不可访问new MyAsyncTask.executejSONString;我发现这个错误不能引用在封闭范围内定义的非最终局部变量jSONString

这部分代码是从MainActivity内部类中的onLocationChanged方法调用的:

PostData类:

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);