2013-08-07 3 views
1

Ниже приведен класс, возвращающий значение счетчика данных в String. Я хотел форматировать строку в KB, MB и GBФормат строки в KB, MB и GB

public class MainActivity extends Activity { 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     TextView infoView = (TextView)findViewById(R.id.traffic_info); 
     String info = ""; 

     long getmobilerxbytes = TrafficStats.getMobileRxBytes(); 
     long getmobilerxpackets = TrafficStats.getMobileRxPackets(); 
     long getmobiletxbytes = TrafficStats.getMobileTxBytes(); 
     long getmobiletxpackets = TrafficStats.getMobileTxPackets(); 

     long totalrxbytes = TrafficStats.getTotalRxBytes(); 
     long totalrxpackets = TrafficStats.getTotalRxPackets(); 
     long totaltxbytes = TrafficStats.getTotalTxBytes(); 
     long totaltxpackets = TrafficStats.getTotalTxPackets(); 

     info += "Mobile Interface:\n"; 
     info += ("\tReceived: " + getmobilerxbytes + " bytes/" + getmobilerxpackets + " packets\n"); 
     info += ("\tTransmitted: " + getmobiletxbytes + " bytes/" + getmobiletxpackets + " packets\n"); 

     info += "All Network Interface:\n"; 
     info += ("\tReceived: " + totalrxbytes + " bytes/" + totalrxpackets + " packets\n"); 
     info += ("\tTransmitted: " + totaltxbytes + " bytes/" + totaltxpackets + " packets\n"); 

     infoView.setText(info); 

}

Вот прекрасный способ сделать это:

public static String humanReadableByteCount(long bytes, boolean si) { 
     int unit = si ? 1000 : 1024; 
     if (bytes < unit) return bytes + " B"; 
     int exp = (int) (Math.log(bytes)/Math.log(unit)); 
     String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i"); 
     return String.format("%.1f %sB", bytes/Math.pow(unit, exp), pre); 
    } 

Но я не знаю, как я могу использовать выше метод в моем OnCreate код

заранее спасибо

ответ

17

Вызвать метод путем передачи байтов. Добавьте строку, которая возвращается после выполнения вычислений в TextView.

public static String getFileSize(long size) { 
     if (size <= 0) 
      return "0"; 
     final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" }; 
     int digitGroups = (int) (Math.log10(size)/Math.log10(1024)); 
     return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups]; 
    } 
+0

Спасибо, я понял. – user45678

+0

@ user574639 Что значит «счетчик работает очень быстро»? Как быстро что-то работает в вашем приложении, не имеет никакого отношения к методу Чиранджиба, что является правильным. – Simon

+0

@Simon - Не правильный способ ответа. – user45678

0

Просто сдавшие bytes вы получаете от getTotal**Bytes() до humanReadableByteCount метода. И отправьте si как истинные или ложные, в зависимости от точности (например, вы хотите 1KB = 1000 байт или 1024 байта).

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TextView infoView = (TextView)findViewById(R.id.traffic_info); 
    String info = ""; 

    info += "Mobile Interface:\n"; 
    info += ("\tReceived: " + TrafficStats.getMobileRxBytes() + " bytes/" + TrafficStats.getMobileRxPackets() + " packets\n"); 
    info += ("\tTransmitted: " + TrafficStats.getMobileTxBytes() + " bytes/" + TrafficStats.getMobileTxPackets() + " packets\n"); 

    info += "All Network Interface:\n"; 
    info += ("\tReceived: " + TrafficStats.getTotalRxBytes() + " bytes/" + TrafficStats.getTotalRxPackets() + " packets\n"); 

    info += humanReadableByteCount(TrafficStats.getTotalRxBytes(),true); 

    info += ("\tTransmitted: " + TrafficStats.getTotalTxBytes() + " bytes/" + TrafficStats.getTotalTxPackets() + " packets\n"); 

    info += humanReadableByteCount(TrafficStats.getTotalTxBytes(),true); 

    infoView.setText(info); 
+0

Можете ли вы на самом деле показать, что в коде? Я редактирую свой код, о котором идет речь. – user45678

+0

Спасибо пользователю2550754. Я получил это ... Глупые изменения были – user45678

+0

, если он работает, тогда вы должны принять ответ и перенести его. Это помогло бы в будущем посетителю найти ответ. – surhidamatya

0

Просто использовать некоторые математические формулы показано ниже, где вам нужно:

if(bytes < 1024) 
    return bytes + " bytes"; 

bytes /= 1024; 
if(bytes < 1024) 
    return bytes + " KB"; 

bytes /= 1024; 
if(bytes < 1024) 
    return bytes + " MB"; 

bytes /= 1024; 
if(bytes < 1024) 
    return bytes + " GB"; 

return String(bytes); 

и передать его функционировать

humanReadableByteCount(bytes,true); 

где байт равен TrafficStats.getTotalTxBytes()

Надеюсь, поможет. я нашел ссылку на стек слишком link1 и link2

0

для КБ: ((float) Math.round((sizeInBytes/(1024)) * 10)/10)

для MB: ((float) Math.round((sizeInBytes/(1024 * 1024)) * 10)/10)

для GB: ((float) Math.round((sizeInBytes/(1024 * 1024 * 1024)) * 10)/10)

Смежные вопросы