Вызвать метод основного Thead From child thread - PullRequest
0 голосов
/ 06 марта 2012

В моем приложении я использую мыльный вызов webservice, основываясь на ответе на вызов webservice, мне нужно отобразить некоторые сообщения.,

Но после ответа я не смог сделать это из порожденной дочерней нити

Итак, как вернуться к основной теме и отобразить это после того ответа, который я получил

Надеюсь, это понятно .. помогите мне, как выполнить мое требование

{
Thread t1 = new Thread() {
public void run() {

    String threadName = Thread.currentThread().getName();
    // There will be delay in this statement while fetching a data from webservice
    String  returnfromWebservice =   webservice(xmlDetails, "generateid");
    Log.v("returnfromWebservice",returnfromWebservice);
    if(  ! returnfromWebservice.equalsIgnoreCase("nil")){ 
        gotid = returnfromWebservice;
        gotReply=true;
    //  dothis();// I could able to do this because this method contains widgets
    //  I am gettin the error : Only the original thread that created a view hierarchy can touch its views.
    //I understand this is because childthread has no controls on widget 
    /**Suggest me how to get back to main thread*/
    }
    }};
t1.start();
dothis();// so i am doin here after the completion of it 


}

public void dothis{
if(gotReply){
    idtext.setText(gotid);
    genId.setEnabled(false);
    Toast.makeText(WelcomeScorer.this, "Generated ", 500).show();
}
else{
    Toast.makeText(WelcomeScorer.this, "Try Once More ", 500).show();
    idtext.setText(gotid);
}
}

Я новичок в Android, есть ли лучший подход в Android API, чтобы справиться с этой ситуацией ??

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Вы должны использовать следующий код для прикосновения к вашим элементам пользовательского интерфейса из другого потока

youractivityname.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

            }
        });

Если ваш поток находится в той же активности, вы можете использовать это.В противном случае вы должны использовать объект класса активности для запуска вышеуказанного метода.Из вашего кода вы должны вызвать dothis ();после того, как поток сделал свою работу.Из вашего он будет вызывать метод dothis сразу после запуска потока, ему не важно, выполнил ли поток свою работу или нет.

1 голос
/ 06 марта 2012

Различные методы описаны в этой статье .Использование runOnUiThread , вероятно, самое простое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...