私の英語で申し訳ありません。
次のコードを使用して、ftp ホストからタブレットにファイルをダウンロードします。Wi-Fi を使用すると、すべてがうまく機能します。しかし、モバイル インターネットを使用してファイルをダウンロードしようとすると、ダウンロードが停止しますが、常にではなく、正常に終了することがあります。停止は常に「retrieveFile」または「logout」で行われていることがわかりました。プログラムはこれらのコマンドに到達し、それ以上進まず、単に停止し、データ転送のアイコンが点滅せず、停止がランダムに発生します。別の携帯会社を使ってみましたが、違いはありません。その理由は何ですか?
そして別の質問ですが、それほど重要ではありません。ファイルサイズを取得する方法がわかりませんでした。私の決定を使用しました。ファイルサイズを取得する別の方法があるかもしれません。
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); }
どんな助けもかなりのものです。