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

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

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

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

Q&A

解決済

3回答

10698閲覧

AndroidでIntentを使った画面遷移の方法について

MikeDavis

総合スコア13

Android

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

0グッド

0クリップ

投稿2015/02/20 09:02

メソッドstartActicity(intent)は型GmaMgrで未定義です。というエラーが出てしまいます```lang-package jp.example.game2;

import java.util.ArrayList;
import java.util.LinkedList;

import jp.example.game2.Barricade.eType;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.MediaPlayer;
import android.util.Log;

@SuppressLint("WrongCall")
public class GmaMgr{
MainActivity main;
private enum eStatus{
NORMAL,
GAMEOVER,
GAMECLEAR
};

private ArrayList<Barricade> _barrList = new ArrayList<Barricade>(); private LinkedList<Task> _taskList = new LinkedList<Task>(); private eStatus _status=eStatus.NORMAL; private Player _player; private MediaPlayer mp1; GmaMgr(Context context){ _barrList.add(new BarricadeSquare( 0, 0,1200, 20, null)); _barrList.add(new BarricadeSquare( 0, 0, 20,1800, null)); _barrList.add(new BarricadeSquare(1180, 0, 20,1800, null)); _barrList.add(new BarricadeSquare( 0,1800,1200, 20, null)); _barrList.add(new BarricadeSquare(550,0,40,1740,null)); //Left _barrList.add(new BarricadeSquare(70, 440, 480, 40, null)); _barrList.add(new BarricadeSquare(0, 535, 500, 40, null)); _barrList.add(new BarricadeSquare(70, 630, 480, 40, null)); _barrList.add(new BarricadeSquare(0, 725, 500, 40, null)); _barrList.add(new BarricadeSquare(70, 820, 480, 40, null)); _barrList.add(new BarricadeSquare(0, 915, 500, 40, null)); _barrList.add(new BarricadeSquare(70, 1010, 480, 40, null)); _barrList.add(new BarricadeSquare(0, 1105, 500, 40, null)); _barrList.add(new BarricadeSquare(70, 1200, 480, 40, null)); _barrList.add(new BarricadeSquare(0, 1295, 500, 40, null)); _barrList.add(new BarricadeSquare(70, 1390, 480, 40, null)); _barrList.add(new BarricadeSquare(0, 1485, 500, 40, null)); _barrList.add(new BarricadeSquare(70, 1580, 480, 40, null)); _barrList.add(new BarricadeSquare(0, 1675, 500, 40, null)); //Right _barrList.add(new BarricadeSquare(590, 50, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 145, 530, 40, null)); _barrList.add(new BarricadeSquare(590, 240, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 335, 530, 40, null)); _barrList.add(new BarricadeSquare(590, 430, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 525, 530, 40, null)); _barrList.add(new BarricadeSquare(590, 620, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 715, 530, 40, null)); _barrList.add(new BarricadeSquare(590, 810, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 905, 530, 40, null)); _barrList.add(new BarricadeSquare(590, 1000, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 1095, 530, 40, null)); _barrList.add(new BarricadeSquare(590, 1190, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 1285, 530, 40, null)); _barrList.add(new BarricadeSquare(590, 1380, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 1475, 530, 40, null)); _barrList.add(new BarricadeSquare(590, 1570, 540, 40, null)); _barrList.add(new BarricadeSquare(650, 1665, 530, 40, null)); //_barrList.add(new BarricadeSquare(0, 900, 1200, 20, new BConf(+PI/180))); //_barrList.add(new BarricadeSquare(0, 900, 1200, 20, new BConf(-PI/180))); //_barrList.add(new BarricadeTriangle(900,1200,200,new BConf(+PI/180))); _barrList.add(new BarricadeSquare(800,20,380,30,new BConf(eType.GOAL))); for (Barricade bar : _barrList) { _taskList.add(bar); } _player=new Player(); _taskList.add(_player); mp1=MediaPlayer.create(context,R.raw.kusai); mp1.start(); } private boolean Collision(){ Vec vec = new Vec(); final Circle cir = _player.getPt(); for(Barricade barr : _barrList){ Def.eHitCode code = barr.isHit(cir, vec); switch(code){ case OUT: _status = eStatus.GAMEOVER; return true; case GOAL: _status=eStatus.GAMECLEAR; return true; case NO: break; default: break; } } return false;

}

public boolean onUpdate(){ if( _status != eStatus.NORMAL ){ return true; } if( Collision() ){ return true; } for(int i=0; i<_taskList.size(); i++){ if(_taskList.get(i).onUpdate()==false){ _taskList.remove(i); i--; } } return true; } public void drawStatus(Canvas c){ switch( _status ){ case GAMEOVER: { mp1.stop(); Paint paint = new Paint(); paint.setTextSize(80); paint.setColor(Color.BLACK); c.drawText("GameOver", 40, 100, paint); Intent intent = new Intent(main,jp.example.game2.NewAct.class); startActivity(intent); break; } case GAMECLEAR: { mp1.stop(); Paint paint=new Paint(); paint.setTextSize(80); paint.setColor(Color.BLACK); c.drawText("GameClear",40,100, paint); } break; case NORMAL: break; default: break; }

}
public void onDraw(Canvas c){
c.drawColor(Color.WHITE);
for(Task task:_taskList){
task.onDraw(c);
}
drawStatus(c);
}
}
コード

startActivityのところで、エラーが出てしまいます。 イライラ棒ゲームを作成しており、ゲームオーバーになったら、別のクラスにIntentで画面遷移したいのですが、上記のエラーが出てしまいます。 どのようにして対処すればいいのでしょうか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

もしかして、

lang

1private Context context;

だけ追加して、コンストラクタでcontextを格納していないのでは?
だとしたら、コンストラクタの中に

lang

1this.context = context;

を追加してください。

投稿2015/02/20 16:05

swordone

総合スコア20651

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

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

MikeDavis

2015/02/20 16:21

追加したらできました!! ありがとうございました!
jollyjoester

2015/02/20 16:37

やったーお疲れ様です(`・ω・́)ゝ
guest

0

前の方の答えは間違っています。
startActivityはActivityのメソッドなので、このコードなら

lang

1main.startActivity(intent)

としなければなりません。
なので、コンストラクタでMainActivityを受け取り、それをクラス変数に格納して
(現在のコードだとどこからもmainに代入されていません)
上のコードを実行するといけるのでは?
なお、ContextにはActivityも入れられるので(ActivityはスーパークラスにContextを持つ)、
MainActivityを渡して全部処理できると思いますよ。

投稿2015/02/20 15:26

swordone

総合スコア20651

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

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

jollyjoester

2015/02/20 15:41

このソースだと普通はMainActivityクラスでGmaMgrをnewするときにthisを渡しているはずです。コンストラクタでcontextを受け取っているのでcontextにはMainActivityのオブジェクトが入っているはず。。。 間違っていると指摘されていますが同じことをおっしゃてますよ(´・ω・`)
swordone

2015/02/20 15:44

すみません、勘違いでした
jollyjoester

2015/02/20 15:50

あ、いえいえm(_ _)m 文字だとなかなかコンテキスト伝えにくいですよね^^;;;
guest

0

startActicity(intent)はContextクラスのメソッドです。
Contextを継承しているActivityの中ではstartActivity(intent);という形で使えますが
そうではないクラスで使用する場合はstartActivityを呼ぶ主体を指定しなければなりません。

今回の場合はコンストラクタでもらっているcontextをどっかに保存しておき、下記のようにするとうまくいく気がします。

context.startActivity(intent);

投稿2015/02/20 09:42

jollyjoester

総合スコア1585

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

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

MikeDavis

2015/02/20 09:58

回答ありがとうございます。 上記のように記述してみたのですが、 contextを解決できません というエラーがでます。
MikeDavis

2015/02/20 10:05

追記します。 上のprivateがたくさんある所に private Context context; という文を追加してみたら、エラーは出なくなりました。 しかし、実際に起動して条件を満たしてみたところ、問題が発生したため、Game2を終了します。と出てアプリが落ちてしまいました。
jollyjoester

2015/02/20 10:29

Intent(main, xxxx)としていますがmainはどこかで代入していますか? ここでも必要なのはcontext(ざっくり言うとどのActivityから呼ばれているか)なので Intent(context, xxx)としてみてください。 (さらに落ちるようであればNewActアクティビティががmanifestファイルに登録されてるかどうかも確認してください。)
MikeDavis

2015/02/20 14:52

何度もすみません。 mainにはMainActivityを代入しています。 Intent(context,xxx)としてみましたが、やはり落ちてしまいます。 AndroidManifest.xmlにも、NewActを登録しています。 package jp.example.game3; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class NewAct extends Activity{ public void onCreate(Bundle icicle) { super.onCreate(icicle); TextView textView = new TextView(this); textView.setText("HelloWorld"); setContentView(textView); } } 一応NewActのコードを書いておきます。
jollyjoester

2015/02/20 15:48

ちょっと混乱させてしまいましたがコンストラクタで受け取ったcontextをすでに宣言しているmainというインスタンス変数に保存してみましょう。そしたら@swordoneさんがおっしゃる書き方でいけると思います。これでダメだったらもっと別な原因ですねぇ。。。 main = context; ... main.startActivity(intent);
MikeDavis

2015/02/20 15:49

やはりエラーが出ます。 LogCatを確認してみると、 java.lang.NullPointerException: Attempt to invoke virtual method 'void … on a null object reference というエラーのようです。 調べてみても、よくわかりませんでした。 これはどのようなエラーなのでしょうか?
jollyjoester

2015/02/20 15:59

...のところが大事な情報っぽいのですが全文見れますか?
swordone

2015/02/20 16:13

mainはMainActivity,contextはContextなので、キャストしないと入れられませんよ main = (MainActivity) context; NullPointerExceptionはどこかでnullを何かのオブジェクトとしてみて、そのオブジェクトのメソッドを実行しようとしたとか、nullに対して不正なアクセスがされたときの例外です。 その場所がおそらくjollyjoesterさんご指摘の通りメッセージの...にあると思うのですが
MikeDavis

2015/02/20 16:24

swordoneさんの指摘通り、 this.context = context; を追加したらできました! jollyjoesterさんも、こんな遅くまでご教授して下さりありがとうございました! お二方のお陰です。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問