Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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 异步任务中的线程可见性_Java_Android - Fatal编程技术网

Java 异步任务中的线程可见性

Java 异步任务中的线程可见性,java,android,Java,Android,下面的代码创建并执行后台任务 String dateString = null; if (dateSelected) dateString = Utils.parseDateToMsTimestamp(selectedDate); final String ori = originCode; final String dest = destinationCode; RequestScheduleTask requestScheduleTask = new RequestScheduleT

下面的代码创建并执行后台任务

String dateString = null;
if (dateSelected)
    dateString = Utils.parseDateToMsTimestamp(selectedDate);
final String ori = originCode;
final String dest = destinationCode;
RequestScheduleTask requestScheduleTask = new RequestScheduleTask();
requestScheduleTask
        .execute(ori, dest, dateString);
originCode和destinationCode是实例变量

下面是后台任务的作用

private class RequestScheduleTask extends
        AsyncTask<String, Void, List<CUSchedule>> {

    @Override
    protected List<CUSchedule> doInBackground(String... args) {
        List<CUSchedule> cuSchedules = null;

        try {
            cuSchedules = CURestCommunicator
                    .requestSUScheduleByOriginAndDestination(args[0],
                            args[1], args[2]);
        } catch (NetworkException e) {
        }
        return cuSchedules;

    }

    @Override
    protected void onPostExecute(List<CUSchedule> result) {
        if (result == null) {
            raiseError("Server Error");
        }
        InnoBusApplication innoBusApplication = (InnoBusApplication) getApplication();
        innoBusApplication.setCuSchedules(result);
        super.onPostExecute(result);
    }

}
以下是http调用的部分功能

public static List<CUSchedule> requestSUScheduleByOriginAndDestination (
        String origin, String destination, String date) throws NetworkException {

    Log.d("upload", "up");

    origin = Utils.shortNameForCity(origin);
    destination = Utils.shortNameForCity(destination);

    HttpClient client = null;

    String url = "http://" + SVR + "/innobussvr/BusSchedulesSearchByOrgDestStartTimeEndTime/"
            + origin + "/" + destination;

    Log.d("url", url);
            ...
}
以下是结果的URL

http://192.168.0.150/innobussvr/BusSchedulesSearchByOrgDestStartTimeEndTime/null/null


我知道这是一个线程可见性问题。如何解决它?

简单的解决方案只需为RequestScheduleTask创建一个Constractor,它接受2个字符串并传递它们,然后在Task class 2本地字符串变量内创建。

我的意思是,由于线程可见性,您如何理解这一点?您能否在IDE中调试此代码,以查看流程是否按预期进行?这是来自RequestScheduleTask的静态调用,如果您确实正确设置/调用了RequestScheduleTask,这应该可以工作。你能通过调试器运行这个吗?没有任何线程可见性问题,我觉得你的代码还可以。我敢打赌,您的字符串在某处丢失了,请在调用Utils.shortNameForCity.requestScheduleTask.executeori、dest、dateString之后,尝试为原始和目标设置一个Log.d行;我调用了Log.dorigin/destination,originCode+/+estinationCode;我看到了正确的价值观。可能在那个时候你们仍然有这些价值观。尝试在shortNameForCity调用前后放置一个日志行。@nKn这可能是我的问题的原因。谢谢