2013-03-23 53 views
1

我想通过套接字发送图像,并且发送进程进入进度条时必须显示,并且应该在图像发送时进行更新,但是当我尝试此代码时进度条未显示,图像正在发送。我想在发送图像时实现进度条

try { 
     //image send 
     client = new Socket(ServerIP,4444); 

     File file = new File(path); 
     byte[] mybytearray = new byte[(int) file.length()]; 
     FileInputStream fis = new FileInputStream(file); 
     BufferedInputStream bis = new BufferedInputStream(fis); 
     bis.read(mybytearray, 0, mybytearray.length); 
     OutputStream os = client.getOutputStream(); 
     DataOutputStream dos = new DataOutputStream(os);  
       dos.writeUTF(file.getName()); 
        int bytesread=0; 

     ProgressDialog pd = new ProgressDialog(c); 
     pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     pd.setMessage("Sending..."); 
     pd.setCancelable(false); 
     pd.setProgress(0); 
     pd.show(); 

      while((bytesread=fis.read(mybytearray))>0) 
       os.write(mybytearray, 0, mybytearray.length); 
       int old_value=pd.getProgress(); 
        int new_read=(int)(((float)file.length()/bytesread)); 
       int value= new_read+old_value; 
       pd.setProgress(value); 
       pd.dismiss(); 
     os.write(mybytearray, 0, mybytearray.length); 
     os.flush(); 
     bis.close(); 
     fis.close(); 
     client.close(); 

    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

回答

1

你必须看看这种类型的任务的AsyncTask。试试这个下面的代码,并使用您的要求

public class UploadImage extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(ShowFullImageShare.this); 
     pDialog.setMessage("Updating to twitter..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... args) { 

     // write your code here for sending image 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String file_url) {   
     pDialog.dismiss(); 

    } 
} 

调用此的AsyncTask这样

new UploadImage().execute(); 
+0

感谢解决方案,但我要实现的水平进度,如果在通知 – 2013-03-23 10:48:28

+0

可能显示它尝试使用水平进度条代替这个垂直进度条。 – 2013-03-23 10:51:11

+0

我尝试过,但发送图像后直接获得100,而不是在发送图像时获取更新 – 2013-03-23 11:17:35

0
public class UploadImage extends AsyncTask<Void, Integer, Void> { 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    pDialog = new ProgressDialog(ShowFullImageShare.this); 
    pDialog.setMessage("Sending..."); 
    pDialog.setIndeterminate(false); 
    pDialog.setCancelable(false); 
    pDialog.show(); 
} 

@Override 
protected Void doInBackground(Void... args) { 

while((bytesread=fis.read(mybytearray))>0) 
os.write(mybytearray, 0, mybytearray.length); 
int old_value=pd.getProgress(); 
int new_read=(int)(((float)file.length()/bytesread)); 
int value= new_read+old_value; 
os.write(mybytearray, 0, mybytearray.length); 
os.flush(); 
bis.close(); 
fis.close(); 
client.close(); 

publishProgress(value); 
return null; 
} 

@Override 
protected void onProgressUpdate(Integer progress) {   
    pDialog.setProgress(progress); 

} 

@Override 
protected void onPostExecute(Void value) {   
    pDialog.dismiss(); 

} 
}