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

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

ただいまの
回答率

90.61%

  • Android

    6419questions

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

  • Android Studio

    3620questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,606

ken0625

score 32

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)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/15 18:37

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

    キャンセル

  • 2015/09/15 19:43

    そもそも、1つの画面から2つの画面を同時に呼び出すことはお勧めできません。
    また、onCreateはActivityを生成するためのライフサイクルメソッドです。この後もonStartやonResume等のメソッドが呼ばれます。この途中で画面遷移したもしても遷移前の画面と遷移後の画面のライフサイクルメソッドが並走し何が起きるか予想できません。
    今回のエラーの原意はその辺にあるかもしれません。

    対応として、
    1-MainActivity#onCreateでの別画面への遷移をやめる。
    2-1で特にエラーが発生しない場合はMainActivity#onResumeでwallCreateへの遷移を行う。

    また、問題ないと思いますが、mode_create.xmlにおいて、@+id/delete_buttonが二回使用されているのも気になります。

    キャンセル

  • 2015/09/15 23: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>

    キャンセル

  • 2015/09/15 23: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>

    キャンセル

  • 2015/09/16 00:16 編集

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

    キャンセル

  • 2015/09/16 00:52

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

    キャンセル

  • 2015/09/16 01:19 編集

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

    キャンセル

  • 2015/09/16 01:29

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

    キャンセル

  • 2015/09/16 01:45

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

    キャンセル

  • 2015/09/16 01:53

    ビルドしてなかったとかの凡ミスとかですかねー?
    モヤモヤしますね

    バシッと回答できなくてすみませんでした。

    キャンセル

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Android

    6419questions

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

  • Android Studio

    3620questions

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