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

サーバーにデータを送信するときにUIがハングしないようにするには、 AsyncTaskを使用してコードを次のように変更します。

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 に答える