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

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

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

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

Android Studio

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

Q&A

解決済

2回答

3740閲覧

android、エミュレータで実行しても表示される前にエラーになる

ken0625

総合スコア40

Android

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

Android Studio

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

0グッド

0クリップ

投稿2015/09/15 03:18

android studioで簡単なゲームを作っているのですが、インテントでデータ受け渡してfinish()を呼び出すボタンを作った途端に実行してもstoppedがでて動かなくなりました。どこが間違っているのかもわかりません。

###MainActivity.java

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { Log.d("debug", "debug1"); super.onCreate(savedInstanceState); Intent intent = new Intent(this, wallCreate.class); int requestCode = 1001; startActivity(intent); Log.d("debug", "debug1"); Intent intent_P2 = new Intent(this, wallCreate.class); int requestCode_P2 = 1002; startActivityForResult( intent_P2, requestCode_P2 ); setContentView(R.layout.activity_main); } public void onActivityResult( int requestCode, int resultCode, Intent intent ) { // startActivityForResult()の際に指定した識別コードとの比較 if( requestCode == 1001 ){ // 返却結果ステータスとの比較 if( resultCode == Activity.RESULT_OK ){ // 返却されてきたintentから値を取り出す ArrayList<Line> lines_yoko = intent.getParcelableExtra("lines_yoko"); ArrayList<Line> lines_tate = intent.getParcelableExtra("lines_tate"); } } if( requestCode == 1002 ){ // 返却結果ステータスとの比較 if( resultCode == Activity.RESULT_OK ){ // 返却されてきたintentから値を取り出す ArrayList<Line> lines_yoko_P2 = intent.getParcelableExtra("lines_yoko"); ArrayList<Line> lines_tate_P2 = intent.getParcelableExtra("lines_tate"); } } } }

###wallCreate.java

public class wallCreate extends Activity { private wallCreate_view wallCreate_view; public void onCreate(Bundle savedInstanceState) { Log.d("debug", "debug1"); super.onCreate(savedInstanceState); setContentView(R.layout.mode_create); this.wallCreate_view = (wallCreate_view) findViewById(R.id.wallCreate_view); findViewById(R.id.delete_button).setOnClickListener(deleteDrawing); findViewById(R.id.finish_button).setOnClickListener(finish); } View.OnClickListener deleteDrawing = new View.OnClickListener() { @Override public void onClick(View view) { wallCreate_view.delete(); } }; View.OnClickListener finish = new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); // intentへ添え字付で値を保持させる intent.putExtra("lines_yoko",wallCreate_view.getLine_yoko()); intent.putExtra("lines_tate",wallCreate_view.getLine_tate()); // 返却したい結果ステータスをセットする setResult(Activity.RESULT_OK, intent); finish(); } }; }

###mode_create.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" > <view android:id="@+id/wallCreate_view" android:layout_width="wrap_content" android:layout_height="wrap_content" class="com.example.sonekenichiro.game1.wallCreate_view" android:layout_above="@+id/delete_button" > </view> <Button android:id="@+id/finish_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="FINISH" android:layout_alignParentBottom="true" android:layout_alignParentRight="true"/> <Button android:id="@+id/delete_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerInParent="true" android:text="delete" /> </RelativeLayout>

###wallCreate_view.java

public class wallCreate_view extends View { ArrayList<Line> lines_yoko = new ArrayList<Line>(); ArrayList<Line> lines_tate = new ArrayList<Line>(); Line line[][] = new Line[6][5]; Line_tate line_tate[][] = new Line_tate[5][6]; private int w_state=0; public wallCreate_view(Context context,AttributeSet attrs) { super(context,attrs); } public void onDraw(Canvas c) { Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.BLACK); paint.setStrokeWidth(16); paint.setStyle(Paint.Style.STROKE); c.drawRect(16, 200, 1068, 1500, paint); if (w_state == 0) { for (int i = 0; i < 6; i++) { for (int j = 0; j < 5; j++) { line[i][j] = new Line(24 + i * 173, 416 + j * 216); lines_yoko.add(line[i][j]); } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) { line_tate[i][j] = new Line_tate(197 + i * 173, 208 + j * 216); lines_tate.add(line[i][j]); } } w_state++; } if(w_state ==1){ for (int i = 0; i < 6; i++) { for (int j = 0; j < 5; j++) { if(line[i][j].checkState()==0){ line[i][j].onDraw(c); }else{ line[i][j].drawOnTouch(c); } } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) { if(line_tate[i][j].checkState()==0){ line_tate[i][j].onDraw(c); } if(line_tate[i][j].checkState()==1){ line_tate[i][j].drawOnTouch(c); } } } } } public boolean onTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_DOWN){ Log.d("TOUCH","touch1"); for (int i = 0; i < 6; i++) { for (int j = 0; j< 5; j++) { line[i][j].checkTouch(event.getX(), event.getY()); } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) { line_tate[i][j].checkTouch(event.getX(),event.getY()); } } invalidate(); return true; } return true; } public ArrayList<Line> getLine_yoko(){ return lines_yoko; } public ArrayList<Line> getLine_tate(){ return lines_tate; } public void delete(){ for (int i = 0; i < 6; i++) { for (int j = 0; j< 5; j++) { line[i][j].stateChangeToN(); } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) { line_tate[i][j].stateChangeToN(); } } invalidate(); } }

###エラーコード

09-13 17:21:43.422 1526-1535/android.process.acore E/StrictMode﹕ A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:57)
at android.os.Binder.execTransact(Binder.java:446)

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

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

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

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

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

guest

回答2

0

別の回答として回答してしまったので、削除します。

投稿2015/09/15 15:14

編集2015/09/15 15:16
yona

総合スコア18155

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

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

0

ベストアンサー

ストリクトモードの制約に引っかかっているみたいですね。
理由としてMainActivityからwallCreateを二回起動しているため、最初に呼ばれたwallCreateのリソース解放がなされていないためと考えられます。
まず、どちらかの呼び出しをコメントアウトしてどうなるかを教えてください。

投稿2015/09/15 09:07

yona

総合スコア18155

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

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

ken0625

2015/09/15 09:37

2回目の呼び出しをコメントアウトしました。 ですが結果は変わりません... unfortunately,game1 has stoppedとでてok押すと先ほどのエラーコードが出るだけです。 あとすいません最初の呼び出しも本当は startActivityForResult(intent,requestCode);で呼び出してます。いろいろ試すときに直すの忘れてしまいました。
yona

2015/09/15 10:43

そもそも、1つの画面から2つの画面を同時に呼び出すことはお勧めできません。 また、onCreateはActivityを生成するためのライフサイクルメソッドです。この後もonStartやonResume等のメソッドが呼ばれます。この途中で画面遷移したもしても遷移前の画面と遷移後の画面のライフサイクルメソッドが並走し何が起きるか予想できません。 今回のエラーの原意はその辺にあるかもしれません。 対応として、 1-MainActivity#onCreateでの別画面への遷移をやめる。 2-1で特にエラーが発生しない場合はMainActivity#onResumeでwallCreateへの遷移を行う。 また、問題ないと思いますが、mode_create.xmlにおいて、@+id/delete_buttonが二回使用されているのも気になります。
ken0625

2015/09/15 14:24

指示通りやってみたのですが、そもそも遷移するメソッドを全て消しても同じ結果になります...ストリクトモード調べてみたらレイアウトファイルのミスでも起こると書いてあったのでxmlファイルに問題があるんでしょうか... activity_mainはこうなってます <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" > </RelativeLayout>
ken0625

2015/09/15 14:25

マニフェストファイルはこうなってます <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sonekenichiro.game1" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".wallCreate"></activity> </application> </manifest>
yona

2015/09/15 15:17 編集

どんどん可能性を削っていきましょう。 1:MainActivity#onCreate()内でのsetContentView()をコメントアウトする。 →正常ならレイアウトが悪い。異常ならマニフェストが悪い。 2:マニフェストの<activity android:name=".wallCreate"></activity>の箇所を削除 →追加したらActivityは疑う 3:他の開始タグと終了タグが揃っているかを確認
ken0625

2015/09/15 15:52

どうやらマニフェストファイルのエラーみたいです。1から3までやってみた結果レイアウトもアクティヴィティも関係ないみたいなので... ただ開始タグと終了タグはどんなに調べてもずれてたりしてないんですよね... 本当に丁寧にありがとうございます。
yona

2015/09/15 16:26 編集

なかなか絞れないですねallowBackup="true"を消してみたらどうなるでしょうか? その次はiconの値をmipmapフォルダからdrawableフォルダに変更してみてください。
ken0625

2015/09/15 16:29

変わらないです... iconも消してやってみたけどダメでした。 android studioなんですが何かのエラーコードが出る前にストップしている感じで... エラーのきちんとした読み取り方を知らないので何かを見落としているのでしょうか...
ken0625

2015/09/15 16:45

今いじっていたらなぜか動きました!! 配列にも少し間違いがあってそれも直したら動かすことに成功しました!! 結局なぜエラーが起きていたのか全くわかりませんでしたが...お手数おかけしました...
yona

2015/09/15 16:53

ビルドしてなかったとかの凡ミスとかですかねー? モヤモヤしますね バシッと回答できなくてすみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問