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

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

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

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

Android Studio

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

Q&A

解決済

2回答

8217閲覧

画面遷移の段階でアプリが強制終了してしまう

sonnshou

総合スコア7

Java

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

Android Studio

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

0グッド

0クリップ

投稿2017/01/18 06:54

編集2017/01/18 08:51
mport android.app.Activity; import android.content.Intent; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.CheckBox; import android.widget.PopupWindow; import android.widget.TextView; public class MainActivity extends Activity implements SensorEventListener { private SensorManager manager; private Sensor detectorSensor; private Sensor stepCntSensor; private int stepcount = 0; boolean isTimely = false; TextView textview; TextView textview2; TextView textview3; boolean flag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textview = (TextView) findViewById(R.id.textview); textview2 = (TextView) findViewById(R.id.textview2); textview3 = (TextView) findViewById(R.id.textview3); manager = (SensorManager) getSystemService(SENSOR_SERVICE); //センサマネージャからTYPE_STEP_DETECTORについての情報を取得する。 detectorSensor = manager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR); //センサマネージャからTYPE_STEP_COUNTERについての情報を取得する。 stepCntSensor = manager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); } @Override protected void onResume() { super.onResume(); manager.registerListener(this, stepCntSensor, SensorManager.SENSOR_DELAY_NORMAL); manager.registerListener(this, detectorSensor, SensorManager.SENSOR_DELAY_NORMAL); flag=true; } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { Sensor sensor = event.sensor; float[] values = event.values; if (sensor.getType() == Sensor.TYPE_STEP_COUNTER) { CheckBox check=(CheckBox)findViewById(R.id.checkbox); Log.d("type_step_counter", String.valueOf(values[0])); textview2.setText("STEP_COUNTER=" + String.valueOf(values[0] + "歩")); if (check.isChecked()) { if (isTimely) { if(flag){ Intent intent = new Intent(MainActivity.this, Pop.class); startActivity(intent); flag=false; } isTimely = true; } if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) { Log.d("type_detector_counter", String.valueOf(values[0])); textview.setText("STEP_DETECTOR=" + stepcount + "歩"); stepcount++; } } } @Override protected void onPause() { super.onPause(); //リスナーの解除 manager.unregisterListener(this, stepCntSensor); manager.unregisterListener(this, detectorSensor); } }

このプログラムで画面遷移を使用としているのですが、現状はOnSensorChengedの中身でisTimelyがfalseからtrueに変更されてから画面遷移のプログラムが動いた段階で落ちています。

public class Pop extends MainActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.popup); Button btn=(Button)findViewById(R.id.button); btn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ finish(); } }); } }

こちらのプログラムに遷移したいのですが、アプリの強制終了してしまう理由がわかりません。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

自己解決

画面遷移の段階でエラーが出てたが、画面遷移が問題なのではなくて、画面遷移をした後のcheckの値がnullになっていたためにおきたエラーであった。
画面遷移をした際に画面遷移をした先にcheckboxがないのにcheckboxの処理をとめずに実行していたためにnullになり、強制終了していたと考えられます。

投稿2017/01/18 14:22

sonnshou

総合スコア7

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

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

0

popup.xmlの中にidがbuttonのViewは存在しますか?
また、センサーの値が変わるたびにPopに遷移し続けると思いますが、遷移したあとにセンサーを止める処理ははいっていますか?

エラーが出ているならエラーログを質問に載せましょう。

投稿2017/01/18 06:59

yona

総合スコア18155

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

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

sonnshou

2017/01/18 07:18

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="解除する" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/pop" android:src="@drawable/stop"/> <!--android:scaleType="fitXY"!--> </LinearLayout> xmlの中にはbuttonのViewはあります。 遷移するときに処理はどういう風になっているのでしょうか? Activityを移動した際に自動では止まらないのでしょうか? Pop.javaの方から戻ってきたらどこからMainActicityのプログラムは作動するのでしょうか? わかっていないことばかりですみません。 エラーログは出ていません。 ビルドした段階では何もエラーは出ていないのです。
yona

2017/01/18 07:25

startActivityの前でログ出力して何個出力されるかを確認してください。 ログキャットに表示されるエラーログを質問に記載してください。
sonnshou

2017/01/18 07:42

ログを出力するようにしてビルドしたのですが・・・ 電源から離して歩いてみないとこのプログラムが動かないので、離して歩いた後にプログラムが落ちてしまうので、つなげた際にログが出ないのです。
yona

2017/01/18 07:47

ならログはいいです。 ・PopのsetContentViewより後の処理をコメントアウトしてエラーが発生するかを確認してください。 ・MainActivityからPopに遷移する処理をコメントアウトして実行してください。
sonnshou

2017/01/18 07:58

・PopのsetContentViewより後の処理をコメントアウトしてエラーが発生するかを確認してください。 こちらの方ですが、コメントアウトしてもプログラム上のエラーはありませんでした。 歩いてみた場合ですが、強制終了して以前と変わらないものでした。 ・MainActivityからPopに遷移する処理をコメントアウトして実行してください。 Intent intent = new Intent(MainActivity.this, pop.class); startActivity(intent); この部分をコメントアウトして実行してみましたが、プログラム上ではエラーは起きません。 歩いてみましたが、歩数がカウントされて歩数が増えていくだけでした。
yona

2017/01/18 08:08

ビルドエラーは関係ないのでコメントは不要です。 遷移先に問題はなく、遷移元に問題がありそうですね。 次は下記を試してください。 ・フィールド変数にフラグを一つ追加する。 ・フラグをonResumeでtrueにする。 ・遷移処理の前でフラグを判定し、trueなら画面遷移してください。 ・画面遷移処理の直前でフラグをfalseにする。 ・
sonnshou

2017/01/18 08:35

質問のコードにflagを追加しました。 これで違うようなら変更します。 この状態では、先ほどと同じように一回センサーが動作して値が変更して、次に動いた際にアプリが強制終了しました。
yona

2017/01/18 08:48

遷移処理の直前でフラグをfalseにしてください。現状のコードではtrueにしています。
sonnshou

2017/01/18 08:52

移す際に書き損じました。 実際のプログラムではfalseになっています。 falseになった状態で先ほどの結果になっております。
yona

2017/01/18 10:22

やっぱりログが無いと無理ですね。 USBで繋いだ状態で使えるようにできませんか?
sonnshou

2017/01/18 11:22

自己解決いたしました。 Activityが移動した後でも元のプログラムが動いていたのか checkの値がnullのままで動作していたためにアプリが強制終了していたようです。 色々相談に乗っていただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問