开发者

Task not finishing and forbidding TextView to be updated

I am now working on an android app in which I need to display a text after some processing is done. I'm using a Thread to run a process in the back while my progress dialog is being displayed to the user. The Thread works properly and I've followed it step by step and, apparently, it also ends fine; however, the method in which I call it does not seem to come to an end (at least, during a normal cycle) because the text I am setting afterward does display immediately, I have to wait and do some other action (like in order for it to display

Below is the piece of code I'm having trouble with:

private OnClickListener saldoDisp = new OnClickListener(){
    public void onClick(View v){
        int x = s2.getSelectedItemPosition();
        branchSel = arrSucsId[x];
        mainProc();
             saldoAdminTex.setText(strSaldo);  //The late one
    }
};    

public void mainProc(){
    chekP = new Thread (null,doProc,"Background");
    chekP.start();
    mProgress =ProgressDialog.show(SivetaAsaldo.this, "","Obteniendo saldo...",true, false);    
}

private Runnable doProc = new Runnable(){
    public void run(){
        if(getSaldoAdmin(levelSel,branchSel))
        {
            mProgress.dismis();
                    Log.i(TAG,"Task completed properly");
        }else       
            handler.post(tosti);
    }
};

So I do get the "Task completed properly" but seems like it still waits for something else, any clues guy开发者_JAVA百科s? Thanks for taking a bit of your time to check it out =).


saldoAdminTex.setText(strSaldo);  //The late one

is going to get called immediately. It doesn't wait until after the Thread started in mainProc ends. You also cannot dismiss the Progress Dialog in your runnable. You can only do UI related things on the main UI thread.

It would help you to read the article on Painless Threading on the Android Dev site.


About your ProgressDialog, please see this answer about how to use a AsyncTask with a ProgressDialog.


Looking at your code, this:

saldoAdminTex.setText(strSaldo);

would potentially be executed before your thread finishes as the thread will be running in parallel to that line.

An alternative way would be to do this:

public void mainProc(){
    mProgress =ProgressDialog.show(SivetaAsaldo.this, "","Obteniendo saldo...",true,false);
    handler.post(new Runable(){
    public void run(){
        if(getSaldoAdmin(levelSel,branchSel))
        {
            mProgress.dismis();
            saldoAdminTex.setText(strSaldo); 
            Log.i(TAG,"Task completed properly");
        }else       
            handler.post(tosti);
    }
 });
}
0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜