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

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

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

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

4回答

350閲覧

Serviceを作りました。コードが汚いと言われました。どこが問題でしょうか?

atatatatata

総合スコア77

Java

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/07/31 04:25

このServiceで、やりたいことはできるのですが、先輩にこれじゃ、改善しないと使えないって言われました。コードが汚いってことだと思うんですが、どこが問題でしょうか?

java

1import android.app.Service; 2import android.content.Intent; 3import android.location.Criteria; 4import android.location.LocationManager; 5import android.os.Binder; 6import android.os.IBinder; 7import android.location.LocationListener; 8import android.content.pm.PackageManager; 9import android.location.Location; 10import android.support.v4.app.ActivityCompat; 11import android.os.Bundle; 12import android.util.Log; 13import com.google.firebase.database.DatabaseReference; 14import com.google.firebase.database.FirebaseDatabase; 15import com.google.firebase.auth.FirebaseAuth; 16 17public class GpsService extends Service implements LocationListener{ 18 19 private final String TAG ="GpsService"; 20 final FirebaseDatabase database = FirebaseDatabase.getInstance(); 21 22 23 public class GpsServiceBinder extends Binder { 24 public GpsService getService() { 25 return GpsService.this; 26 } 27 } 28 29 @Override 30 public void onCreate() { 31 super.onCreate(); 32 } 33 34 public GpsService() { 35 } 36 37 //removeupdatesは必要 38 // @Override 39 // protected void onPause(){ 40 // super.onPause(); 41 // locationManager.removeUpdates(this); 42 // mLocationManager.removeUpdates(listener); 43 // } 44 45 protected void initLocationService() { 46 47 if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 48 return; 49 } 50 if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 51 ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 52 return; 53 } 54 55 Criteria criteria = new Criteria(); 56 criteria.setAccuracy(Criteria.ACCURACY_FINE); //setAccuracyは内部では、https://stackoverflow.com/a/17874592/1709287の用にHorizontalAccuracyの設定に変換されている 57 criteria.setPowerRequirement(Criteria.POWER_HIGH); 58 criteria.setAltitudeRequired(false); 59 criteria.setSpeedRequired(true); 60 criteria.setCostAllowed(true); 61 criteria.setBearingRequired(false); 62 criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); 63 criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH); 64 65 66 LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 67 String bestProvider = locationManager.getBestProvider(criteria, true); 68 locationManager.requestLocationUpdates(bestProvider, 6000, 1, this); 69 } 70 71 @Override 72 public void onLocationChanged(Location location) { 73 Log.d(TAG,"onLocationChanged"); 74 refreshGeoLocation(location); 75 } 76 77 @Override 78 public void onStatusChanged(String provider, int status, Bundle extras) { 79 } 80 81 @Override 82 public void onProviderEnabled(String provider) { 83 } 84 85 @Override 86 public void onProviderDisabled(String provider) { 87 } 88 89 Double forlatitude; 90 Double forlongitude; 91 boolean run=false; 92 Double pchecklatitude = 0.0; 93 Double mchecklatitude = 0.0; 94 Double pchecklongitude = 0.0; 95 Double mchecklongitude = 0.0; 96 Integer count=0; 97 98 protected void refreshGeoLocation(Location location) { 99 Log.v(TAG,"refreshGeoLocation"); 100 String user = FirebaseAuth.getInstance().getCurrentUser().getUid(); 101 DatabaseReference ref = database.getReference().child("users").child(user); 102 DatabaseReference latitudeRef = ref.child("latitude"); 103 DatabaseReference longitudeRef = ref.child("longitude"); 104 105 106 count++; 107 if (count == 1) { 108 forlatitude = location.getLatitude(); 109 forlongitude = location.getLongitude(); 110 } 111 if (run == false) { 112 pchecklatitude = forlatitude + 0.00025094944; 113 mchecklatitude = forlatitude - 0.00025094944; 114 pchecklongitude = forlongitude + 0.00025094944; 115 mchecklongitude = forlongitude - 0.00025094944; 116 117 Log.v(TAG,"LocationChange():"+count.toString()); 118 Log.v(TAG,"getLatitude():"+location.getLatitude()+"pchecklatitude"+pchecklatitude.toString()); 119 Log.v(TAG,"getLatitude():"+location.getLatitude()+"mchecklatitude"+mchecklatitude.toString()); 120 121 if (location.getLatitude() > pchecklatitude || location.getLatitude() < mchecklatitude && 122 location.getLongitude() > pchecklongitude || location.getLongitude() < mchecklongitude) { 123 124 latitudeRef.setValue(location.getLatitude()); 125 longitudeRef.setValue(location.getLongitude()); 126 run = true; 127 128 Log.v(TAG,"移動検知:"+count.toString()); 129 Log.v(TAG,"getLatitude():"+location.getLatitude()+"pchecklatitude"+pchecklatitude.toString()); 130 Log.v(TAG,"getLatitude(:)"+location.getLatitude()+"mchecklatitude"+mchecklatitude.toString()); 131 132 //ここで保存用に追加 133 forlatitude = location.getLatitude(); 134 forlongitude = location.getLongitude(); 135 } 136 } else if (run == true) { 137 latitudeRef.setValue(location.getLatitude()); 138 longitudeRef.setValue(location.getLongitude()); 139 Log.v(TAG,"追跡中:"+count.toString()); 140 Log.v(TAG,"getLatitude():"+location.getLatitude()+"pchecklatitude"+pchecklatitude.toString()); 141 Log.v(TAG,"getLatitude():"+location.getLatitude()+"mchecklatitude"+mchecklatitude.toString()); 142 } 143 } 144 145 @Override 146 public IBinder onBind(Intent intent) { 147 throw new UnsupportedOperationException("Not yet implemented"); 148 } 149 150 private void startLocation() { 151 initLocationService(); 152 } 153 154 private void stopLocation() { 155 //firebase.auth().signOut();これでログアウトはできるが、ログアウトはしない 156 database.goOffline(); 157 } 158 159 @Override 160 public int onStartCommand(Intent intent, int flags, int startId) { 161 162 String check =intent.getStringExtra("start/stop"); 163 if(check.equals("start")){ 164 startLocation(); 165 }else if(check.equals("stop")){ 166 stopLocation(); 167 } 168 169 return super.onStartCommand(intent, flags, startId); 170 } 171 172 @Override 173 public void onDestroy() { 174 super.onDestroy(); 175 } 176 177} 178

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

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

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

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

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

yoorwm

2017/07/31 04:28

「コードが汚いってことだと思うんですが」という部分は先輩に聞いたのでしょうか?推測に過ぎない事を、赤の他人に聞くのは好ましい事では無いと思いますが
ygoooo

2017/07/31 04:32

「コードが汚い」も抽象的でわかりません。まず先輩に、なぜ使えないと思ったのかききましょう。
atatatatata

2017/07/31 04:32

コードが汚いとも言っていました。何かアドバイスをもらいたいです
atatatatata

2017/07/31 04:36

調べろって言われました。
atatatatata

2017/07/31 04:36

見てわかる問題がないならそれでいいんですが、
guest

回答4

0

ベストアンサー

「誰に質問すべきか」を考えていますか。

先輩が「改善すべき」と言ったのであれば、改善すべき点を知っているのは先輩で先輩に聞くべきです。
ネットで質問しても、得られた回答が先輩の意図したものである可能性は限りなく低いです。

また、仮に改善点を聞いて「自分で考えろ」と言われたのであれば、この質問をしている行為自体が先輩の期待を裏切っています。

また、先輩は「使い物になるように改善しろ」と言ったのであれば、「コードが汚い」という意味ではないと思います。コードは汚くても動きます。
先輩はこれでは「仕様を満たしていないから改善しろ」と言った可能性もあります、これもやはり先輩に確認すべきです。

投稿2017/07/31 08:33

yona

総合スコア18155

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

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

atatatatata

2017/07/31 09:25

わかりました。先輩に確認して、何を意図した発言であったのかを理解して考えます。 ありがとうございます。
guest

0

その先輩が、具体的にどの部分が汚いと言ってきたのかがわかりませんが、
コーディングルールは会社などのグループや、個人によって違うので、
何がどう汚いのか?などを指示するのは難しいです。

ただ、私が思うに、失礼ながら質問者さんはまだjavaの基礎知識自体が不足しているようなので、
このあたりのHPか
Java セキュアコーディングスタンダード
Javaコーディング標準

このあたり書籍などを参考にしましょう。
Javaルールブック ~読みやすく効率的なコードの原則

投稿2017/07/31 04:38

jm1156

総合スコア866

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

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

atatatatata

2017/07/31 04:59

ありがとうございます。勉強します!!
guest

0

限られた時間内で成果を出さないといけないのでなかなか難しいとは思いますが、
逆に完璧、美しいと言われるようなコードがどんなコードを想像してみましょう。
それに近づけるためにすぐ出来ることをやってみてはいかがでしょうか。
汚いかどうかは別として、綺麗とは言えない というような意味合いで考えてみてはいかがでしょうか。

投稿2017/07/31 05:38

YasuhiroMiyake

総合スコア1336

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

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

atatatatata

2017/07/31 05:44

わかりました。ありがとうございます!!
guest

0

基本的に、その組織のコーディングルールに従って書くべきで、何をもってきれいか汚いかというのは外部から指摘しにくいかと思います。
ただ、あえて言えば、定数は定義してそれを代入なり計算なりに使ったほうが良いかと思います。

投稿2017/07/31 06:29

CodeLab

総合スコア1939

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

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

atatatatata

2017/07/31 06:32

わかりました。定数の定義を使用するようにします。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問