Проблема с ответом кнопки Android - PullRequest
1 голос
/ 11 мая 2011

привет всем так как я использую кнопку и при нажатии этой кнопки она подключается к веб-службе. Но проблема в том, что, когда я нажимаю кнопку, она не показывает мне, что она нажата, и уходит для подключения к Интернету и веб-сервису. после подключения он показывает мне ответ, что он был нажат. короче, реакция кнопки очень медленная. если у этого бутона есть некоторая возможность подключения к Интернету в своем слушателе. я знаю, что это как-то связано с потоком пользовательского интерфейса. но, пожалуйста, друзья, проведите меня через это.

Спасибо большое,

Ответы [ 4 ]

1 голос
/ 11 мая 2011

Введите следующий код в вашем классе:

 // 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.
        }
    };

А для вызова веб-службы используйте следующий код в событии кнопки:

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

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

На самом деле вы ищете многопоточность, все вызовы веб-службы и сетевые операции должны проходить в отдельном потоке. После вызова потока start () вы можете делать все, что захотите, и это будет сделано мгновенно без каких-либо задержек (в вашем случае показ этой нажатой кнопки).

1 голос
/ 11 мая 2011

Вы должны написать класс скажем MyWebService и расширить его из AsyncTask. Выполните операцию подключения в переопределенном методе doInBackground () и обновите все изменения пользовательского интерфейса в его методе onPostExecute ().

1 голос
/ 11 мая 2011

Создайте новый поток в onClickListener, который выполняет тяжелую работу в фоновом режиме. Таким образом, поток пользовательского интерфейса сможет обновлять состояние кнопки:

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();
});
1 голос
/ 11 мая 2011

Вы должны использовать Handler для этой фоновой операции, уже спрашивайте в ОС перейдите по этой ссылке диалог прогресса не отображается в Android?

...