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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

3054閲覧

Intentの初期化に失敗する

amato

総合スコア15

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2016/10/20 12:54

編集2016/10/21 06:21

Android Studio2.2

Intent intent = new Intent(context, BallActivity.class);
startActivity(intent);

画面遷移の上記のようにすることでできますが、intent初期化しようとした時点で(一文目に入るときに)画面がブラックアウトします。エラー文も出ません。BallActivityのonResumeは正しく呼ばれています。LabyrinthView.startSensor();の直前でエラーが起こるので、LabyrinthViewに原因があると思われます。ここで考えられる原因は何があるでしょうか。遷移先のソースコードを以下に載せます。下のアクティビティ以外は普通に起動することができます。マニフェストファイルには遷移先のアクティビティを宣言してあります。

java

1 2//BallActivity.java 3 4import android.content.Context; 5import android.content.Intent; 6import android.os.Bundle; 7import android.support.v7.app.AppCompatActivity; 8import android.view.WindowManager; 9import android.widget.Toast; 10 11public class BallActivity extends AppCompatActivity implements LabyrinthView.EventCallback { 12 13 14 static int clearCounter = 0; 15 16 17 private static final String EXTRA_KEY_STAGE_SEED = "stage_seed"; 18 19 int goalCount = 4; 20 int missCount = 0; 21 22 int r = new java.util.Random().nextInt(4000); 23 24 public static Intent newIntent(Context context, int stageSeed) { 25 Intent intent = new Intent(context, BallActivity.class); 26 intent.putExtra(EXTRA_KEY_STAGE_SEED, stageSeed); 27 28 return intent; 29 } 30 31 private int stageSeed; 32 33 private boolean isFinished; 34 35 private LabyrinthView labyrinthView; 36 37 38 @Override 39 protected void onCreate(Bundle savedInstanceState) { 40 super.onCreate(savedInstanceState); 41 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 42 43 //int clearCounter = 0; 44 stageSeed = getIntent().getIntExtra(EXTRA_KEY_STAGE_SEED, 0); 45 46 labyrinthView = new LabyrinthView(this); 47 labyrinthView.setCallback(this); 48 labyrinthView.setStageSeed(stageSeed); 49 50 setContentView(labyrinthView); 51 //setContentView(R.layout.activity_main); 52 53 } 54 55 @Override 56 protected void onResume() { 57 super.onResume(); 58 59 labyrinthView.startSensor(); 60 //clearCounter += 1; 61 62 } 63 64 @Override 65 protected void onPause() { 66 super.onPause(); 67 68 labyrinthView.stopSensor(); 69 } 70 71 @Override 72 public void onGoal() { 73 74 if (isFinished) { 75 return; 76 } 77 isFinished = true; 78 79 Map.setClearCounter(Map.getClearCounter()+1); 80 81 Toast.makeText(this, Map.getClearCounter() + "回目のゴール", Toast.LENGTH_SHORT).show(); 82 83 labyrinthView.stopSensor(); 84 85 Intent intent = newIntent(this, stageSeed + r); 86 startActivity(intent); 87 finish(); 88 89 } 90 91 @Override 92 public void onHole() { 93 if (isFinished) { 94 return; 95 } 96 isFinished = true; 97 98 Map.setMissCounter(Map.getMissCounter()+1); 99 100 101 102 Toast.makeText(this, Map.getMissCounter() + "回目のミス", Toast.LENGTH_SHORT).show(); 103 //Toast.makeText(this, String.valueOf(Map.getClearCounter()),Toast.LENGTH_LONG).show(); 104 105 labyrinthView.stopSensor(); 106 107 Intent intent = newIntent(this, stageSeed); 108 startActivity(intent); 109 finish(); 110 } 111 112 @Override 113 public void onChange() { 114 if (isFinished) { 115 return; 116 } 117 isFinished = true; 118 119 Toast.makeText(this, "Goal!!", Toast.LENGTH_SHORT).show(); 120 121 labyrinthView.stopSensor(); 122 123 Intent intent = new Intent(this, StopAlarm.class); 124 startActivity(intent); 125 finish(); 126 } 127} 128

java

1//LabyrinthView.java 2 3import android.content.Context; 4import android.graphics.Bitmap; 5import android.graphics.BitmapFactory; 6import android.graphics.Canvas; 7import android.graphics.Color; 8import android.graphics.Paint; 9import android.hardware.Sensor; 10import android.hardware.SensorEvent; 11import android.hardware.SensorEventListener; 12import android.hardware.SensorManager; 13import android.view.SurfaceHolder; 14import android.view.SurfaceView; 15 16import java.util.concurrent.atomic.AtomicBoolean; 17 18public class LabyrinthView extends SurfaceView implements SurfaceHolder.Callback { 19 private static final float ACCEL_WEIGHT = 3f; 20 21 private static final float BALL_SCALE = 0.8f; 22 23 private static final int DRAW_INTERVAL = 1000 / 60; 24 private static final float TEXT_SIZE = 40f; 25 26 private final Paint paint = new Paint(); 27 private final Paint textPaint = new Paint(); 28 29 private final Bitmap ballBitmap; 30 31 private Ball ball; 32 private Map map; 33 34 interface EventCallback { 35 void onGoal(); 36 void onHole(); 37 void onChange(); 38 } 39 40 private EventCallback eventCallback; 41 42 public void setCallback(EventCallback eventCallback) { 43 this.eventCallback = eventCallback; 44 } 45 46 private int stageSeed; 47 48 public void setStageSeed(int stageSeed) { 49 this.stageSeed = stageSeed; 50 } 51 52 public LabyrinthView(Context context) { 53 super(context); 54 55 textPaint.setColor(Color.WHITE); 56 textPaint.setTextSize(TEXT_SIZE); 57 58 ballBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ball); 59 60 getHolder().addCallback(this); 61 } 62 63 64 private DrawThread drawThread; 65 66 private class DrawThread extends Thread { 67 private final AtomicBoolean isFinished = new AtomicBoolean(); 68 69 public void finish() { 70 isFinished.set(true); 71 } 72 73 @Override 74 public void run() { 75 SurfaceHolder holder = getHolder(); 76 while (!isFinished.get()) { 77 if (holder.isCreating()) { 78 continue; 79 } 80 Canvas canvas = holder.lockCanvas(); 81 if (canvas == null) { 82 continue; 83 } 84 85 drawLabyrinth(canvas); 86 87 holder.unlockCanvasAndPost(canvas); 88 89 synchronized (this) { 90 try { 91 wait(DRAW_INTERVAL); 92 } catch (InterruptedException e) { 93 } 94 } 95 } 96 } 97 } 98 99 public void startDrawThread() { 100 stopDrawThread(); 101 102 drawThread = new DrawThread(); 103 drawThread.start(); 104 } 105 106 public boolean stopDrawThread() { 107 if (drawThread == null) { 108 return false; 109 } 110 111 drawThread.finish(); 112 drawThread = null; 113 return true; 114 } 115 116 private static final float ALPHA = 0.8f; 117 private float[] sensorValues; 118 119 private final SensorEventListener sensorEventListener = new SensorEventListener() { 120 @Override 121 public void onSensorChanged(SensorEvent event) { 122 if (sensorValues == null) { 123 sensorValues = new float[3]; 124 sensorValues[0] = event.values[0]; 125 sensorValues[1] = event.values[1]; 126 sensorValues[2] = event.values[2]; 127 return; 128 } 129 130 sensorValues[0] = sensorValues[0] * ALPHA + event.values[0] * (1f - ALPHA); 131 sensorValues[1] = sensorValues[1] * ALPHA + event.values[1] * (1f - ALPHA); 132 sensorValues[2] = sensorValues[2] * ALPHA + event.values[2] * (1f - ALPHA); 133 134 if (ball != null) { 135 float xOffset = -sensorValues[0] * ACCEL_WEIGHT; 136 float yOffset = sensorValues[1] * ACCEL_WEIGHT; 137 ball.move(xOffset, yOffset); 138 } 139 } 140 141 @Override 142 public void onAccuracyChanged(Sensor sensor, int accuracy) { 143 144 } 145 }; 146 147 public void startSensor() { 148 sensorValues = null; 149 150 SensorManager sensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE); 151 Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 152 sensorManager.registerListener(sensorEventListener, accelerometer, SensorManager.SENSOR_DELAY_GAME); 153 } 154 155 public void stopSensor() { 156 SensorManager sensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE); 157 sensorManager.unregisterListener(sensorEventListener); 158 } 159 160 161 @Override 162 public void surfaceCreated(SurfaceHolder holder) { 163 startDrawThread(); 164 } 165 166 @Override 167 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 168 } 169 170 @Override 171 public void surfaceDestroyed(SurfaceHolder holder) { 172 stopDrawThread(); 173 } 174 175 public void drawLabyrinth(Canvas canvas) { 176 canvas.drawColor(Color.BLACK); 177 178 int blockSize = ballBitmap.getHeight(); 179 if (map == null) { 180 map = new Map(canvas.getWidth(), canvas.getHeight(), blockSize, stageSeed, 181 eventCallback); 182 } 183 if (ball == null) { 184 ball = new Ball(ballBitmap, map.getStartBlock(), BALL_SCALE, map); 185 } 186 187 map.draw(canvas); 188 ball.draw(canvas); 189 190 if (sensorValues != null) { 191 canvas.drawText("sensor[0] = " + sensorValues[0], 10, 150, textPaint); 192 canvas.drawText("sensor[1] = " + sensorValues[1], 10, 200, textPaint); 193 canvas.drawText("sensor[2] = " + sensorValues[2], 10, 250, textPaint); 194 } 195 } 196 197} 198

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

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

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

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

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

guest

回答1

0

ベストアンサー

Activity.classに遷移するんですか?
BallActivity.classの誤りじゃないですか?

投稿2016/10/20 14:10

yona

総合スコア18155

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

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

amato

2016/10/20 14:17

BallActivity.classです。 質問文の一行目でいきなりBallActivityを出すのはやめたほうがいいかとおもってActivity.classと書いていました。修正します
yona

2016/10/20 14:36

なるほど では、LabyrinthViewの実装にバグがあるようですね。 onResumeメソッドが呼ばれているかをログ出力をして確認してください。 このメソッドが呼ばれているならLabyrinthViewにバグがある可能性が高いです。
amato

2016/10/21 05:56

ログ出力したところonResumeは問題なく呼ばれていました。 LabyrinthView.javaを追記します。
yona

2016/10/21 06:32

このコードは自分で書いたものですか?書籍やサイトを元に作成したならそちらを確認した方がいいですよ。
amato

2016/10/22 13:25

このコードは共同開発者が書いたものでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問