2013-07-23 2 views
0

Я запускаю простой запрос fql внутри метода onHandleIntent() Intentservice. Не знаю, в чем проблема, часть запроса не выполняется только для выполнения. здесь мой метод onHandleIntent()Проблема с Android IntentService

protected void onHandleIntent(Intent intent) 
{ 

    System.out.println("inside service method now"); 
    String fqlQuery = "SELECT uid, username, online_presence, status FROM user WHERE uid = 100001024732884"; 

     Bundle params = new Bundle(); 
     params.putString("q", fqlQuery); 
     Session session = Session.getActiveSession(); 
    Request request = new Request(session, 
       "/fql",       
       params,       
       HttpMethod.GET,     
       new Request.Callback(){   
        public void onCompleted(Response response) { 
        System.out.println("inside the service now 4444"); 
         Log.i(TAG, "Result: " + response.toString()); 
        }     
      }); 
      Request.executeBatchAsync(request); 
} 

Только первый отчет печатается.

Когда я добавляю тот же код в свой MainActivity, он работает нормально, но внутри IntentService он перестает работать. Я запускаю сервис на кнопке buttonclick.

+0

Сначала вы должны попытаться поймать ошибку. Этот метод должен вызывать некоторую ошибку. Используйте try catch в методе и поймайте ошибку. Тогда вы сможете решить проблему. –

+0

Вы имеете в виду, что только «внутри службы теперь 4444» печатается? – gunar

+0

нет, выполняется только первый оператор печати. – user1872750

ответ

0

Ваша проблема заключается в том, что IntentService будет завершен и уничтожен до вызова callback, так как он работает асинхронно. Вместо использования обратного вызова для получения ответа попробуйте использовать это вместо этого.

Bundle params = new Bundle(); 
    params.putString("q", fqlQuery); 
    Session session = Session.getActiveSession(); 
    Request request = new Request(session, 
      "/fql",       
      params,       
      HttpMethod.GET); 
    Response response = request.executeBatchAndWait();