2011-07-26 18 views
0

私のプログラムは、サーバーからいくつかのデータを取得します。通常は数秒かかります。私はこのための処理バーを生成したい。そして私はそれを生成する方法を知っています。しかし、どのように区別し、いつ閉じる処理バーを制御する。 私のプログラム:アンドロイド処理バーの問題

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     text1=(TextView)findViewById(R.id.textin); 
     but1=(Button)findViewById(R.id.send); 
     but2=(Button)findViewById(R.id.send2); 
     edit1=(EditText)findViewById(R.id.textout); 

     but1.setOnClickListener(new Button.OnClickListener() 
     { 
      public void onClick(View v) { 
       Socket socket=null; 
       String mesg=edit1.getText().toString()+"\r\n"; 
      try { 
       socket=new Socket("localhost",30000); 
       //send information to server 
       PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 
       out.println(mesg); 
       //receive information from server 
       BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
       String mstr=br.readLine(); 
      if(mstr!=null) 
      { 
       text1.setText(mstr); 
      }else 
      { 
       text1.setText("error"); 
      } 
       out.close(); 
       br.close(); 
       socket.close(); 
      } catch (UnknownHostException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      }catch(Exception e) 
      { 
       Log.e(DEBUG_TAG,e.toString()); 
      } 
      }   
     }); 
     } 

これはクライアントプログラムです。データの量は本当に巨大です。だから私はどのように処理バーを行うことができます。どのように制御できますか? ありがとう!ここで

答えて

0

このためにプログレスダイアログを使用できます。ここで

は、このコードです:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ProgressDialog mProgressDialog; 
     text1=(TextView)findViewById(R.id.textin); 
    but1=(Button)findViewById(R.id.send); 
    but2=(Button)findViewById(R.id.send2); 
    edit1=(EditText)findViewById(R.id.textout); 
     but1.setOnClickListener(new Button.OnClickListener() 
    { 
     public void onClick(View v) { 
       public void onClick(View v) { 
       mProgressDialog = ProgressDialog.show(Places.this, 
      "Please wait...", "Connecting...", true, true, new DialogInterface.OnCancelListener() {public void onCancel(DialogInterface dialog) { 
       }}); 

    new Thread() { 
     public void run() { 

      Socket socket=null; 
      String mesg=edit1.getText().toString()+"\r\n"; 
     try { 
      socket=new Socket("localhost",30000); 
      //send information to server 
      PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 
      out.println(mesg); 
      //receive information from server 
      BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      String mstr=br.readLine(); 
     if(mstr!=null) 
     { 
      text1.setText(mstr); 
     }else 
     { 
      text1.setText("error"); 
     } 
      out.close(); 
      br.close(); 
      socket.close(); 
      sleep(3000); 

     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }catch(Exception e) 
     { 
      Log.e(DEBUG_TAG,e.toString()); 
     } 
     mProgressDialog.dismiss(); 
     }     

    }.start(); 
    } 
    }); 
        } 
0

ダウンロードが完了したことをユーザーに伝えたい場合は、トーストを使用できます。ダウンロードが始まる直前に「ダウンロード中」というメッセージを投げ、ダウンロード完了時にトーストメッセージを無効にする。

完了したダウンロードの%を表示したい場合は、独自のプログレスバーを実装する必要があります(Media Playerのシークバーと同様)。完了した%に基づいて進行状況バーを更新し続ける(1秒あたりの基準)。

シャーシ