开发者

Android Button Response Problem

hi all since i am using a button and on the click of that button it connects to a Web Service. But the problem is that when i press the button it does not showed me that it has been clicked and goes to connect to the internet and web service. after connecting it shows m开发者_运维百科e the response that it has been clicked. in short the response of button is very slow. if that buton has some INternet connectvity in its Listener. i know it has something to do with UI thread. but please friends guide me through this.

Thanks a bunch,


Put the following code in your class:

 // Need handler for callbacks to UI Threads
    // For background operations
    final Handler mHandler = new Handler();

    // Create Runnable for posting results
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            // Do your task which needs to get done after webservice call is complete.
        }
    };

And for calling the webservice use the following code in button event:

new Thread() {
            public void run() {             
                // Place the webservice call here.   

                mHandler.post(mUpdateResults);
            }
            }.start();

Actually what are you looking for is multithreading, all the webservice calls and network activities should go in separate thread. After the thread start() call you can do what ever you want and would be done instantly without any delay (in your case showing that button pressed).


You have to use Handler for this background operation already ask on OS follow this link progress dialog not showing in android?


You should write a class say MyWebService and extend it from AsyncTask. Perform the connect operation in its overridden doInBackground() method and update any UI changes in its onPostExecute() method.


Create a new Thread in the onClickListener that does the heavy work in the background. That way the UI thread will be able to update the state of the button:

button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        new Thread(new Runnable() {

        @Override
        public void run() {
            // Code that connects to web service goes here...
        }
    }).start();
});
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜