私はちょっとした奇妙なタイプミスがあると思っていますが、私は困惑しています。2番目の長い引数は無視されますか?
public void getAvailableStorage() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long availableStorage = blockSize * stat.getAvailableBlocksLong();
long totalStorage = blockSize * stat.getBlockCountLong();
mBackupView.showAvailableStorage(availableStorage, totalStorage);
}
が最後の行にブレークポイントがtotalStorgeとavailableStorageがうまく計算されることを示しています。私は、次のコードを持っています。 showAvailableStorage();に移動します。
public void showAvailableStorage(long free, long total) {
float freePercentage = (float)(free/total) * 100;
}
何らかの理由で、最初の引数だけが値を取得します。しかし、これはgetAvailableStorage()の値をどのような順序で渡すかに関係なくです。 2番目の引数(合計)は無視されます。メソッドで破棄されるのは、最初の引数の値だけです。私はここで何が欠けていますか?メソッドに任意の値を渡しても、同じ結果が得られます。
EDITは:しかし、これはいくつかの理由のために働く...
public void showAvailableStorage(long free, long total) {
long newTotal = total;
float freePercentage = (float)(free/total) * 100;
}
多くのタイムブレークポイントは期待どおりに動作しません。彼らは奇妙な価値を示す。 'showAvailableStorage()'メソッドを呼び出す前に両方の値をログに記録し、 'freePercentage'を計算した後に再び3つの値をすべて記録することができます。 –
また、2番目の値の合計が得られない場合は、totalのデフォルト値が0になることを意味します。そこで、DivideByZeroExceptionが得られるはずです。あなたはそれを取得していますか? –
@SaranSankaranあなたが正しいです。これは一見デバッガのバグです。値は実際には正しいことが判明し、デバッガには表示されませんでした。ありがとう。 – ardevd