2011-09-11 16 views
0

こんにちは、自分のアクティビティにプログレスバーを追加しようとしています。ここにシナリオがあります: 私の活動MESSAGINGはIMSERVICE.SENDFILE()を呼び出し、IMSERVICE.SENDFILE()の引数としてMESSAGINGのコンテキストを渡します。 IMSERVICE.SENDFILE()はSOCKETOPERATOR.SENDFILE()を呼び出します。私も同じ文脈を渡します。あなたは、私はそれでプログレスバーを持って見ることができるようになりましたandroid progress bar

public boolean sendFile(Context c,String path,String ip, int port) { 
     // TODO Auto-generated method stub 


     try { 


      String[] str = ip.split("\\."); 

      byte[] IP = new byte[str.length]; 

      for (int i = 0; i < str.length; i++) { 

       IP[i] = (byte) Integer.parseInt(str[i]); 


      } 
      Socket socket = getSocket(InetAddress.getByAddress(IP), port); 
      if (socket == null) { 
       Log.i("SO sendFILE",""); 

       return false; 
      } 
      Log.i("SocketOP", "sendFILE-1"); 
      File f = new File(path); 
      String filename=path.substring(path.lastIndexOf("/")+1); 
      System.out.println("filename:"+filename); 
      fin.filename = "~"+filename; 
      BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream()); 

      FileInputStream fileIn = new FileInputStream(f); 
      Log.i("SocketOP", "sendFILE-2"); 
      byte [] buffer = new byte [(int)f.length()]; 
      System.out.println("SO sendFile f.length();" + f.length()); 
      int bytesRead =0; 



      ProgressDialog pbarDialog = new ProgressDialog(c); 
      pbarDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      pbarDialog.setMessage("Loading..."); 
      pbarDialog.setCancelable(false); 
      pbarDialog .setProgress(0); 
      pbarDialog.show(); 
       while ((bytesRead = fileIn.read(buffer)) > 0) { 
           out.write(buffer, 0, buffer.length); 
        //get the previous value of progress bar 
           int old_value = pbarDialog .getProgress(); 
           //calculate how much did you read from the file 
           int new_read =(int)(((float) f.length()/bytesRead)*100); 
           //add the new read to the old_value 
           int value = new_read+old_value; 
           pbarDialog.setProgress(value); 
           Log.i("SocketOP", "sendFILE-3"); 

        System.out.println("SO sendFile" + bytesRead +filename); 
          } 
      pbarDialog.dismiss(); 







      out.flush(); 
      out.close(); 
      fileIn.close(); 






     } catch (IOException e) { 
      return false;   
      //e.printStackTrace(); 
     } 
     // Toast.makeText(this, "Lvbvhhging...", Toast.LENGTH_SHORT).show(); 

     return true;  
    } 

:SOCKETOPERATOR.SENDFILE()は、ファイルを送信し、それはこのようになります方法があります。私はそれを私のMESSAGING活動から見せる方法を知らない。また、私は正しくprogressDilogを使用しているかわからない。誰でも助けてくれますか?

+0

これは3回目の質問です。どうして? – Michele

+0

cuz mはそれに苦しんでいます。私の最後の投稿では、答えが新しい質問をするのに役立たない場合、誰かが言った。 –

答えて

0

UIスレッドで進行状況ダイアログとその他のUI関連のものを呼び出しながら、バックグラウンドスレッドで処理する必要があります。 AsyncTaskは何をするように設計されているのですか、ここでそれについてお読みください: http://developer.android.com/reference/android/os/AsyncTask.html