2017-03-28 11 views
0

インターネットからmp3ファイルをダウンロードして内部ストレージに保存しています。ダウンロードの進行状況はProgressDialogです。 ProgressDialogは、進捗状況をパーセントで表示します。右側に進捗状況を1/100として表示します。ダウンロードしたファイルの現在のサイズをMB /ダウンロードしたファイルの合計サイズをMBで表示します。ファイルを表示するプログレスバー(MB)

次の画像のようになります。灰色のテキストは現在表示されているテキストです。その下のテキストのように赤で表示させたい。

enter image description here

ここでは、現在のコードです:

public class DownloadSKHindi extends AsyncTask<String, Integer, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     progressDialog = new ProgressDialog(getActivity()); 
     progressDialog.setMessage("Downloading"); 
     progressDialog.setMax(100); 
     progressDialog.setCancelable(false); 
     progressDialog.setCanceledOnTouchOutside(false); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     progressDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     int count = 0; 
     try { 
      url = new URL(skURL[10]); 

      connection = url.openConnection(); 
      connection.connect(); 

      int lengthOfFile = connection.getContentLength(); 

      InputStream input = new BufferedInputStream(url.openStream()); 

      OutputStream output = getActivity().openFileOutput(file.getPath(), Context.MODE_PRIVATE); 

      byte data[] = new byte[1024]; 

      long total = 0; 

      while ((count = input.read(data)) != -1) { 
       total += count; 

       publishProgress((int) (total * 100/lengthOfFile)); 
       output.write(data, 0, count); 
      } 

      output.flush(); 
      output.close(); 
      input.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     progressDialog.setProgress(values[0]); 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     progressDialog.dismiss(); 
    } 
} 
+0

:あなたこれを行うことができます。最初にファイルサイズを取得し、各パーセントをバイトでチェックしてからMBに変換します –

+0

@Devansh ** total **と** lengthOfFile **のサイズを調べる方法 –

+1

@GowthamanM上記のように、 'lengthOfFile'が取得されます私が接続していたファイルの長さを取得します。ですから、 'AsyncTask'を使ってダウンロードしようとしているファイルであれば、' lengthOfFile'には 'connection.getContentLength();'を使ってください。 'total'はファイルのどれくらいがダウンロードされたかを示します。コードはすでにそれのためにそこにある – Devansh

答えて

1

totalを想定するとは、ダウンロードされているどのように多くのバイトで、lengthOfFileは、ファイルがどのように大規模のバイト単位のサイズです。あなたには、いくつかの計算を行う必要があります(coderにクレジット)機能bytes2Stringを使用して次に

progressDialog.setProgressNumberFormat((bytes2String(total)) + "/" + (bytes2String(lengthOfFile))); 

private static double SPACE_KB = 1024; 
private static double SPACE_MB = 1024 * SPACE_KB; 
private static double SPACE_GB = 1024 * SPACE_MB; 
private static double SPACE_TB = 1024 * SPACE_GB; 

public static String bytes2String(long sizeInBytes) { 

    NumberFormat nf = new DecimalFormat(); 
    nf.setMaximumFractionDigits(2); 

    try { 
     if (sizeInBytes < SPACE_KB) { 
      return nf.format(sizeInBytes) + " Byte(s)"; 
     } else if (sizeInBytes < SPACE_MB) { 
      return nf.format(sizeInBytes/SPACE_KB) + " KB"; 
     } else if (sizeInBytes < SPACE_GB) { 
      return nf.format(sizeInBytes/SPACE_MB) + " MB"; 
     } else if (sizeInBytes < SPACE_TB) { 
      return nf.format(sizeInBytes/SPACE_GB) + " GB"; 
     } else { 
      return nf.format(sizeInBytes/SPACE_TB) + " TB"; 
     } 
    } catch (Exception e) { 
     return sizeInBytes + " Byte(s)"; 
    } 

} 

Source

+0

** total **と** lengthOfFile **のサイズの見方 –

1

使用TextView XMLファイル内progressDialog後に追加されます。 検討するTextView tv = findViewById();

これを使用して:publishProgress((int) (total * 100/lengthOfFile), total ,lengthOfFile);新しいデータをプッシュします。

そしてこのtv使用を更新する:

@Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     progressDialog.setProgress(values[0]); 
tv.setText((values[1]/(1024*1024)) + "" +(values[1]/(1024*1024))); 
    } 
+0

'TextView'を取得する必要はありません。あなたは' ProgressBar#setProgressNumberFormat'を使うことができます。 – JediBurrell

+0

@JediBurrell、面白い考えですが、彼は赤い巨大なテキストを望んでいます – Vyacheslav

+0

私はそれが単なる例であると確信しています。私は間違っているかもしれません。 – JediBurrell

関連する問題