0

我有一个简单的程序,它会提出问题,然后调用一个 php 文件来说明答案是肯定的还是否定的。

现在它可以工作,但是在发送信息时会有轻微的停顿。我想要一些消息或指示器来显示计算机正忙。

现在,当我更改 textvue 的文本时,在发送数据之前,textView 不会更改,我也尝试将其称为更新方法

代码

case R.id.butYes:
                mSend .setText("Sending your vote to server");
                mSend.invalidate();
                 TalkToServer( mYes[mPes-1] );
                UpdateScreen(); 
                mSend .setText("");
                break;

       String TalkToServer( String addr)
       {   
           HttpClient httpclient = new DefaultHttpClient();
           HttpPost  httppost = new HttpPost(addr);

            HttpResponse response;
            String responseBody=new String("");
            try {
                response = httpclient.execute(httppost);



responseBody = EntityUtils.toString(response.getEntity());
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

           return responseBody;
       }
4

1 回答 1

0

在向服务器发送数据时使用AsyncTask避免 UI 挂起只需将代码更改为:

case R.id.butYes:
  new SendTextOperation().execute("");  
  break;

private class SendTextOperation extends AsyncTask<String, Void, String> {

      @Override
      protected void onPreExecute() {

        //Update UI here
        mSend.setText("Sending your vote to server");
        mSend.invalidate();
      }

      @Override
      protected String doInBackground(String... params) {
            // Talk to server here to avoid Ui hanging 
            TalkToServer( mYes[mPes-1] );
            return null;
      }      

      @Override
      protected void onPostExecute(String result) {  
            // Update screen here after talk to server end
                UpdateScreen(); 
                mSend .setText("");
      }

}
于 2012-12-08T18:56:18.187 回答