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

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

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

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

Android

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

Q&A

解決済

1回答

1656閲覧

アクティビティでサービスのメソッドを動かすとエラー落ちする

yuba_yuba

総合スコア44

Java

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

Android

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

0グッド

0クリップ

投稿2016/12/18 07:26

編集2016/12/18 09:48

###前提・実現したいこと
アンドロイドアプリの練習の為ストップウォッチを作っています
画面を消した際も動くようにサービスを使ってるのですが
アクティビティからサービスのメソッドを操作するとエラー落ちします

###発生している問題・エラーメッセージ

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.stoptest, PID: 22534
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.stoptest.MyService.timeStart()' on a null object reference
at com.example.stoptest.MainActivity.timeStart(MainActivity.java:135)
at com.example.stoptest.MainActivity$1.onClick(MainActivity.java:82)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

###該当のソースコード

Java

1protected void onCreate(Bundle savedInstanceState) { 2 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 doBindService(); 6 7 button=(Button)findViewById(R.id.button); 8 button.setTypeface(Typeface.createFromAsset(getAssets(),"7barP.TTF")); 9 button.setText("00:00.0"); 10 11 button.setOnClickListener(new View.OnClickListener() { 12 @Override 13 public void onClick(View view) { 14 15 16 if(mode==1){ 17 18 count=0; 19 timeStart(); 20 mode=2; 21 22 }else if(mode==2){ 23 24 timeStop(); 25 mode=3; 26 27 }else if(mode==3){ 28 29 button.setText("00:00.0"); 30 mode=1; 31 32 } 33 } 34 }); 35 36 receiver=new MyBroadcastReceiver(); 37 intentFilter=new IntentFilter(); 38 intentFilter.addAction("MY_ACTION"); 39 registerReceiver(receiver,intentFilter); 40 } 41 42 private ServiceConnection mConnection=new ServiceConnection() { 43 @Override 44 public void onServiceConnected(ComponentName className, IBinder service) { 45 mBoundService = ((MyService.BindServiceBinder)service).getService(); 46 } 47 48 @Override 49 public void onServiceDisconnected(ComponentName componentName) { 50 mBoundService=null; 51 } 52 }; 53 54 void doBindService(){ 55 Intent intent=new Intent(MainActivity.this,MyService.class); 56 bindService(intent,mConnection,Context.BIND_AUTO_CREATE); 57 mIsBound=true; 58 } 59 60 void doUnbindService(){ 61 if(mIsBound){ 62 unbindService(mConnection); 63 mIsBound=false; 64 } 65 } 66 67 void timeStop(){ 68 myService.timeStop(); 69 } 70 71 void timeStart(){ 72 myService.timeStart(); 73 } 74 75 76public class MyService extends Service { 77 78 private long count=0; 79 private long mm; 80 private long ss; 81 private long ms; 82 83 private Timer timer; 84 private CountUpTimerTask timerTask=null; 85 86 87 88 public class BindServiceBinder extends Binder{ 89 MyService getService(){ 90 return MyService.this; 91 } 92 } 93 94 private final IBinder mBinder=new BindServiceBinder(); 95 @Override 96 public IBinder onBind(Intent intent) { 97 98 99 return mBinder; 100 } 101 102 @Override 103 public void onRebind(Intent intent) { 104 super.onRebind(intent); 105 } 106 107 public void timeStart(){ 108 count=0; 109 timer=new Timer(); 110 timerTask=new CountUpTimerTask(); 111 timer.schedule(timerTask,0,100); 112 } 113 114 115 public void timeStop(){ 116 timer.cancel(); 117 timer=null; 118 } 119 120 121 122 class CountUpTimerTask extends TimerTask{ 123 124 @Override 125 public void run() { 126 count++; 127 mm=count*100/1000/60; 128 ss=count*100/1000%60; 129 ms=(count*100-ss*1000-mm*1000*60)/100; 130 131 Intent broadcastIntent=new Intent(); 132 broadcastIntent.putExtra("count",count); 133 broadcastIntent.putExtra("mm",mm); 134 broadcastIntent.putExtra("ss",ss); 135 broadcastIntent.putExtra("ms",ms); 136 137 broadcastIntent.setAction("MY_ACTION"); 138 getBaseContext().sendBroadcast(broadcastIntent); 139 140 if(mm==60){ 141 timeStop(); 142 } 143 144 } 145 } 146

###試したこと
最初はインテントサービスを使ってやろうとしてたので不要な部分が多いかもしれません
クリックリスナーを使わずに起動からサービス側だけで動作⇒自動停止だと正常に機能します
クリックリスナーを使わずに起動からメソッドの操作を行うとエラー落ちします
つまりメイン側の(サービスのメソッドを操作している部分の)記述がおかしいんだな、という所までは分かったのですがどこが駄目なのかわかりません

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

初期化していない変数myServiceに対してメソッドを呼び出すと例外が発生します。
適切に初期化をしましょう。

また、コードはコード用の記述に修正してください。

投稿2016/12/18 09:18

yona

総合スコア18155

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

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

yuba_yuba

2016/12/18 09:38

ありがとうございます、修正できました。 複数のサイトを参考に修正を繰り返していたので初期化していない変数を使用していました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問