http пост в качестве сервиса - PullRequest
0 голосов
/ 22 октября 2011

Может кто-нибудь, пожалуйста, скажите мне, как заставить этот код работать в фоновом режиме, и какая разница, когда я заставляю код работать в фоновом режиме, как в "сделать в фоновом режиме" и сервис и какой подход я должен использовать*

спасибо всем заранее

это код:

public void  SticketFunction(double book, double libadd, long time){
        Log.v("log_tag", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SticketFunction()");
        //HttpClient
        HttpClient nnSticket = new DefaultHttpClient();
        //Response handler
        ResponseHandler<String> res = new BasicResponseHandler();

        HttpPost postMethod = new HttpPost("http://www.books-something.com");


        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);

            nameValuePairs.add(new BasicNameValuePair("book", book+""));

            nameValuePairs.add(new BasicNameValuePair("libAss", libass+""));

            nameValuePairs.add(new BasicNameValuePair("Time", time+""));

            nameValuePairs.add(new BasicNameValuePair("name", "jack"));
            //Encode and set entity
            postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
            //Execute 
            //manSticket.execute(postMethod);
            String response =Sticket.execute(postMethod, res).replaceAll("<(.|\n)*?>","");
            if (response.equals("Done")){

                //Log.v("log_tag", "!!!!!!!!!!!!!!!!!! SticketFunction got a DONE!");

            }
            else Log.v("log_tag", "!!!!!!!?????????? SticketFunction Bad or no response: " + response);

        } catch (ClientProtocolException e) {  
            // TODO Auto-generated catch block 
            //Log.v("log_tag", "???????????????????? SticketFunction Client Exception");
        } catch (IOException e) {  
            // TODO Auto-generated catch block
            //Log.v("log_tag", "???????????????????? IO Exception");
        } 
    }

}

Ответы [ 2 ]

1 голос
/ 22 октября 2011

Преимущество запуска задачи в Service состоит в том, что она не уничтожается, если пользователь отказывается от вызова Activity.

Вы можете посмотреть на расширение IntentService и реализации onHandleIntent , которая автоматически работает в отдельном потоке.

При использовании Service (или IntentService) в этой ситуации вы передадите значения NameValuePair в Bundle .Вам также необходимо сохранить данные Response в постоянном хранилище (базе данных, предпочтениях и т. Д.) Для последующего извлечения в Activity.

В качестве альтернативы вы можете запустить AsyncTask в обычном Service (реализующем onStartCommand) или в вызывающем Activity.

1 голос
/ 22 октября 2011

Вам не нужен сервис для этого.Я полагаю, что вы можете использовать AsyncTask, если не хотите блокировать свое приложение во время выполнения HTTP-запроса.Он предоставляет удобный интерфейс для отображения результатов в интерфейсе пользователя.

Другой вариант - использование класса Handler.

AsyncTask

...