1

私の英語で申し訳ありません。

  1. 次のコードを使用して、ftp ホストからタブレットにファイルをダウンロードします。Wi-Fi を使用すると、すべてがうまく機能します。しかし、モバイル インターネットを使用してファイルをダウンロードしようとすると、ダウンロードが停止しますが、常にではなく、正常に終了することがあります。停止は常に「retrieveFile」または「logout」で行われていることがわかりました。プログラムはこれらのコマンドに到達し、それ以上進まず、単に停止し、データ転送のアイコンが点滅せず、停止がランダムに発生します。別の携帯会社を使ってみましたが、違いはありません。その理由は何ですか?

  2. そして別の質問ですが、それほど重要ではありません。ファイルサイズを取得する方法がわかりませんでした。私の決定を使用しました。ファイルサイズを取得する別の方法があるかもしれません。

    private void downloadFile(final String url, final String Message, final String Message2, final Uri uri) { final ProgressDialog progressDialog = new ProgressDialog(this); new AsyncTask() { プライベート例外 m_error = null;

           @Override
           protected void onPreExecute() {
            progressDialog.setMessage(Message);
            progressDialog.setCancelable(true);             
            progressDialog.setMax(100);
            progressDialog
              .setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);             
            progressDialog.show();
           }
    
           @Override
           protected File doInBackground(String... params) {         
                     FileOutputStream fos = null;                        
                     File file = null;
                     FTPClient client = null;                       
                          try{  
                           client = new FTPClient();
                           client.connect(ftp_host,Integer.parseInt(ftp_port));
                           client.login(ftp_user, ftp_password);
                           client.enterLocalPassiveMode();
                           client.setFileType(FTP.BINARY_FILE_TYPE);
                           String stat = "";
                           if (url.equals("MobiTrade.apk")){
                               client.changeWorkingDirectory("/var/srv/home/user/mobitrade/update/");}
                        file = new File(Environment.getExternalStorageDirectory(),                     
                                   "/MobiTrade/update/MobiTrade.apk");}
                               stat = client.getStatus("/var/srv/home/user/mobitrade/update/MobiTrade.apk");                                                                   
                           else {   
                               client.changeWorkingDirectory("/var/srv/home/user/mobitrade/"+number+"/out/");
                               file = new File(Environment.getExternalStorageDirectory(),
                                   "/MobiTrade/in/"+url);
                        if (url.equals("message.csv")) file.delete();                               
                               stat = client.getStatus("/var/srv/home/user/mobitrade/"+number+"/out/"+url);                                                                
                         } 
    
                           final Integer FileSize;
                           if (stat.length() >= 64) {
                    stat = stat.substring(49,64);
                    stat = stat.trim();
                    FileSize = Integer.parseInt(stat);
                    }                                                   
                          else {
                    FileSize = 0;
                    }
    
                           fos = new FileOutputStream(file);
    
                           CountingOutputStream cos = new CountingOutputStream(fos){                                   
                               protected void beforeWrite(int n){
                                        super.beforeWrite(n);
                                        publishProgress(getCount(), FileSize);
                               }
                           };                              
    
                           if (url.equals("MobiTrade.apk")){
                               client.retrieveFile("/var/srv/home/user/mobitrade/update/MobiTrade.apk", cos);
                                }   
                           else {       
                               client.retrieveFile("/var/srv/home/user/mobitrade/"+number+"/out/"+url, cos);
                                }           
                       if (url.equals("message.csv")){
                           client.deleteFile("/var/srv/home/user/mobitrade/"+number+"/out/"+url);                                  
                       }            
    
                           client.logout();                             
    
                    }
                          catch (Exception e){
                           e.printStackTrace();
                          }
                             finally{
                                  try{
                                   if (fos != null) fos.close();
                                   if (client.isConnected()) {
                                        client.disconnect();
                                    }
                                  }
                                  catch (IOException e){
                                   e.printStackTrace();
                                  }
                             }
                          return file;
                    }
    
           protected void onProgressUpdate(Integer... values) {
            progressDialog
              .setProgress((int) ((values[0] / (float) values[1]) * 100));
           };
    
           @Override
           protected void onPostExecute(File result) {
            if (m_error != null) {
             m_error.printStackTrace();
             return;
            }
            progressDialog.hide();
            if (url.equals("settings.csv"))
                ProcessSettings(url);
            else if (url.equals("MobiTrade.apk"))
                ProcessUpdate();
            else
                ProcessData(url, Message2, uri);
           }
          }.execute(url);
         }
    

どんな助けもかなりのものです。

4

0 に答える 0