2014-05-01 1 views
0

Следующий код создает фоновое задание и выполняет его.Видимость потока в AsyncTask

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

Я понимаю, что это проблема видимость нити. Как я могу это решить?

+0

Я имею в виду, как вы поняли, что это связано с видимостью резьбы? Можете ли вы отладить этот код в своей среде IDE, чтобы увидеть, что поток идет так, как ожидалось? Это статический вызов из вашей 'RequestScheduleTask', и если вы действительно настраиваете/вызываете свой' RequestScheduleTask' должным образом, это должно работать. Можете ли вы запустить это через отладчик? – prabugp

+0

Не существует проблемы с видимостью нити, ваш код мне кажется подходящим. Готов поспорить, что вы где-то теряете свои строки, попробуйте установить строку 'Log.d()' 'origin' и' destination' до вызова 'Utils.shortNameForCity()'. – nKn

+0

Только после вызова 'requestScheduleTask.execute (ори, Dest, DateString);' Я назвал 'Log.d ("Происхождение/место назначения", originCode + "/" + estinationCode);' И я вижу правильный значения. –

ответ

0

Простое решение просто создайте Constractor for RequestScheduleTask, который принимает 2 строки и передает их, затем создайте внутри локальной строки str класса Task 2.

Смежные вопросы