質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

3回答

2158閲覧

数値をメソッドに投げて文字列で指定した戻り値が返ってこない。

ai_ai

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/03/08 14:42

編集2017/03/08 14:52

数値をメソッドに投げて計算させてStringにして値を返すという処理になります。

エミュレータではちゃんと値が返ってきて
android実機は端末によって値が返ってきたり
返ってこなかったり(返ってこない場合は素通り)

動く端末も存在するので、何が間違っているのかわかりません。
なお、業務のため、USBが差せず、デバッグモードでの実行もできません。

力をお貸しください。
よろしくお願い致します。

java

1 public String setBytes(long byteData) { 2 3 String setByte = ""; 4 double gbData = 0; 5 double mbData = 0; 6 double kbData = 0; 7 if (byteData >= 1073741824) { 8 gbData = (double) (byteData / 1073741824); 9 double afterGb = new BigDecimal(String.valueOf(gbData)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 10 setByte = String.valueOf(afterGb) + "GB"; 11 } 12 if (1048576 <= byteData && byteData < 1073741824) { 13 mbData = (double) (byteData / 1048576); 14 double afterMb = new BigDecimal(String.valueOf(mbData)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 15 setByte = String.valueOf(afterMb) + "MB"; 16 } 17 if (1024 <= byteData && byteData < 1048576) { 18 kbData = (double) (byteData / 1024); 19 double afterKb = new BigDecimal(String.valueOf(kbData)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 20 setByte = String.valueOf(afterKb) + "KB"; 21 } 22 if (byteData < 1024) { 23 setByte = String.valueOf(byteData) + "Bytes"; 24 } 25 26 return setByte; 27 }

ちなみに中の処理を全部消してreturnの型をlongにしても値は返ってくるし

中の処理を

java

1setByte = String.valueOf(byteData) + "Bytes";

だけにしても値は返ってくきます。
なので、投げる値が間違ってるということはないと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2017/03/08 14:54

それぞれのif文の最後でsetByteに文字列を設定する代わりにreturnして(つまり、return String.valueOf(afterGb) + "GB";などにする)、最後のreturn文をreturn nullにするとどうなりますか?
Zuishin

2017/03/09 05:51

ところで https://teratail.com/questions/65846 これあなたの質問ですよね? 業務で Android アプリの開発を行ってるんですか? それなのにデバッグさせてもらえないんですか? で、あなたの作ったアプリを売ってるんですか?
guest

回答3

0

入力値がわからないと予想でしか回答できませんね。
下記のどちらかの方法で入力値を調べて見てください。
・トーストで画面に出力する。
・適当なTextViewを追加してログ出力する。

また、エミュレータで使用した入力値はどのような値ですか?

投稿2017/03/09 02:04

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず整理してみたので試してみてください。
これで動かないなら別のところに問題があるのでしょう。

Java

1public static String setBytes(long byteData) { 2 String setByte = ""; 3 final long gbData = 1073741824; 4 final double mbData = 1048576; 5 final double kbData = 1024; 6 if (byteData >= gbData) { 7 long i = byteData / gbData; 8 long d = (byteData % gbData) * 10000 / gbData; 9 setByte = String.format("%d.%04dGB", i, d); 10 } else if (byteData >= mbData) { 11 setByte = String.valueOf(byteData / mbData) + "MB"; 12 } else if (byteData >= kbData) { 13 setByte = String.valueOf(byteData / kbData) + "KB"; 14 } else { 15 setByte = String.valueOf(byteData) + "Bytes"; 16 } 17 return setByte; 18}

投稿2017/03/08 23:36

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず現時点での突っ込みどころは…
0. 無駄な変数を確保している
結局使う変数は~Dataのうち1つだけ
0. 無駄な条件分岐
elseを使えばシンプルになる
0. 無駄なキャスト・BigDecimalへの変換
doubleにキャストする前は整数同士の除算なので結局整数値
その後BigDecimalへ変換してsetScaleしても元が整数なのでほとんど意味がない

投稿2017/03/08 17:31

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問