繁体   English   中英

android http发布作为服务

[英]android http post as a service

任何人都可以请告诉我如何让这个代码在后台工作,当我使代码在后台工作时有什么不同,如“在后台做”和服务,我应采取哪种方法

感谢所有提前

这是代码:

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

}

您不需要为此服务。 如果您不想在执行HTTP请求时阻止应用程序,我相信您可以使用AsyncTask。 它提供了一个方便的界面,用于显示ui上的结果。

另一种选择是使用Handler类。

的AsyncTask

Service中运行任务的好处是,如果用户退出调用Activity ,则不会销毁它。

您可以考虑扩展IntentService并实现onHandleIntent ,它可以自动在单独的线程上运行。

在这种情况下使用Service (或IntentService )时,您将在Bundle中传递NameValuePair值。 您还需要将Response数据保存到持久存储(数据库,首选项等),以便以后在Activity进行检索。

或者,您可以在常规Service (实现onStartCommand )或调用Activity运行AsyncTask

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM