android程序中,下面是我上传文件到服务器中的代码,代码是可成功运行的,如下:private void uploadFile(String path)//path格式 /mnt/sdcard/DCIM/Camera/2011-12-16-100120.jpg 
{
    String end = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    try
    {
      URL url =new URL(actionUrl);
      HttpURLConnection con=(HttpURLConnection)url.openConnection();  
      /* 允许Input、Output,不使用Cache */
      con.setDoInput(true);
      con.setDoOutput(true);
      con.setUseCaches(false);
      /* 设定传送的method=POST */
      con.setRequestMethod("POST");
      /* setRequestProperty */
      con.setRequestProperty("Connection", "Keep-Alive");
      con.setRequestProperty("Charset", "UTF-8");
      con.setRequestProperty("Content-Type",
                         "multipart/form-data;boundary="+boundary);
      /* 设定DataOutputStream */
      DataOutputStream ds = 
        new DataOutputStream(con.getOutputStream());
      ds.writeBytes(twoHyphens + boundary + end);
      ds.writeBytes("Content-Disposition: form-data; " +
                    "name=\"uploadfile\";filename=\"" +
                    newName +"\"" + end);
      ds.writeBytes(end);          /* 取得文件的FileInputStream */
      FileInputStream fStream = new FileInputStream(path);
      /* 设定每次写入1024bytes */
      int bufferSize = 1024;
      byte[] buffer = new byte[bufferSize];       int length = -1;
      /* 从文件读取数据到缓冲区 */
      while((length = fStream.read(buffer)) != -1)
      {
        /* 将数据写入DataOutputStream中 */
        ds.write(buffer, 0, length);
      }
      ds.writeBytes(end);
      ds.writeBytes(twoHyphens + boundary + twoHyphens + end);       /* close streams */
      fStream.close();
      ds.flush();
      /* 取得Response内容 */
      InputStream is = con.getInputStream();
      int ch;
      StringBuffer b =new StringBuffer();
      while( ( ch = is.read() ) != -1 )
      {
        b.append( (char)ch );
      }
      /* 将Response显示于Dialog */
      showDialog(b.toString().trim());
      /* 关闭DataOutputStream */
      ds.close();
    }
    catch(Exception e)
    {
      showDialog(""+e);
    }
}
现问题是,在文件上传时,手机界面会一直黑着,并不动,直接上传成功,界面才变,现需:在上传时,手机界面要有滚动条或其它方式的提示,不能一直黑在那,怎么实现呀,thanks

解决方案 »

  1. 显示进度条:
    ProgressDialog progressDialog = new ProgressDialog(this);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setTitle(getResources().getString(R.string.reading));
    progressDialog.setMessage(getResources().getString(R.string.lateron));
    progressDialog.setCancelable(false);
    progressDialog.setIndeterminate(false);
    progressDialog.show();隐藏进度条:
    progressDialog.dismiss()
      

  2. 多谢楼上的,
    1 进度条的代码加到哪?
    2 加到上传文件的java方法中,好像没有用,(上传时,接收文件是服务器中的php文件)
    thanks
      

  3. 1 进度条的代码加到哪?
    2 加到上传文件的java方法中,好像没有用,(上传时,接收文件是服务器中的php文件)
    thanks
      

  4. 多谢大家,下面是显示进度条的代码
     handler.sendEmptyMessage(0);
          pd=new ProgressDialog(CiSendActivity.this);
          pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
          pd.setMessage("数据加载中,请稍候...");
    请问 1写到哪,
         2如何用线程来控制?
    thanks
      

  5. 楼主 在线程里面使用handle,在线程里面操作上传。
      

类似问题 »