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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

3回答

1615閲覧

AndroidでIntentを使ったアクティビティの開始をするとアプリが強制終了する

gobou0912

総合スコア11

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2018/08/30 00:34

編集2018/08/30 04:45

前提・実現したいこと

Android超初心者です。
Javaを使ってある文字列を指定した文字数に達するまで繰り返し文字列を作るAndroidアプリを作ろうとしているのですが、結果を表示するアクテビティをIntentを使って開始するとアプリが動作を停止してしまいます。

発生している問題・エラーメッセージ

書いているときやビルド時のエラーメッセージは特に出ません。
追記:ADBのLogCatのErrorを表示すると
実行時に

Log

108-30 03:58:30.247 6374-6381/? E/zygote: Failed writing handshake bytes (-1 of 14): Broken pipe

「作成」ボタンクリック時に

Log

108-30 03:58:44.024 6374-6374/com.sample.stringloop E/AndroidRuntime: FATAL EXCEPTION: main 2 Process: com.sample.stringloop, PID: 6374 3 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample.stringloop/com.sample.stringloop.DisplayResultActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x64 4 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) 5 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 6 at android.app.ActivityThread.-wrap11(Unknown Source:0) 7 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 8 at android.os.Handler.dispatchMessage(Handler.java:106) 9 at android.os.Looper.loop(Looper.java:164) 10 at android.app.ActivityThread.main(ActivityThread.java:6494) 11 at java.lang.reflect.Method.invoke(Native Method) 12 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 13 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 14 Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x64 15 at android.content.res.Resources.getText(Resources.java:339) 16 at android.widget.TextView.setText(TextView.java:5496) 17 at com.sample.stringloop.DisplayResultActivity.onCreate(DisplayResultActivity.java:36) 18 at android.app.Activity.performCreate(Activity.java:7009) 19 at android.app.Activity.performCreate(Activity.java:7000) 20 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 21 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) 22 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)  23 at android.app.ActivityThread.-wrap11(Unknown Source:0)  24 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)  25 at android.os.Handler.dispatchMessage(Handler.java:106)  26 at android.os.Looper.loop(Looper.java:164)  27 at android.app.ActivityThread.main(ActivityThread.java:6494)  28 at java.lang.reflect.Method.invoke(Native Method)  29 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)  30 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)  31

というエラーログが出ました。(無知で本当に申し訳ございません それでも意味が分からないのでご協力お願い致します。)

該当のソースコード

どのコードに問題があるのかわからないので、必要のないコードもあるかもしれません、申し訳ございません。

  1. MainActivity.java

Java

1package com.sample.stringloop; 2 3import android.content.Intent; 4import android.support.v7.app.AppCompatActivity; 5import android.os.Bundle; 6import android.view.View; 7import android.widget.CheckBox; 8import android.widget.EditText; 9public class MainActivity extends AppCompatActivity{ 10 public static final String EXTRA_MESSAGE = "com.sample.stringloop.MESSAGE1"; 11 public static final String EXTRA_MESSAGE3 = "com.sample.stringloop.MESSAGE3"; 12 public static final String EXTRA_BOOLEAN = "com.sample.stringloop.BOOLEAN"; 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 } 19 20 /*作成ボタンを押したときの挙動*/ 21 public void sendMessage(View view){ 22 Intent intent = new Intent(this,DisplayResultActivity.class); 23 EditText editText = (EditText) findViewById(R.id.editText); 24 EditText editText3 = (EditText) findViewById(R.id.editText3); 25 CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox); 26 String mojiretsu = editText.getText().toString(); 27 int mojisuu = Integer.parseInt(editText3.getText().toString()); 28 boolean kaigyo = checkBox.isChecked(); 29 intent.putExtra(EXTRA_MESSAGE, mojiretsu); 30 intent.putExtra(EXTRA_MESSAGE3, mojisuu); 31 intent.putExtra(EXTRA_BOOLEAN, kaigyo); 32 startActivity(intent); 33 } 34}

2.DisplayResultActivity.java

Java

1package com.sample.stringloop; 2 3import android.content.Intent; 4import android.support.v7.app.AppCompatActivity; 5import android.os.Bundle; 6import android.widget.TextView; 7 8public class DisplayResultActivity extends AppCompatActivity { 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_display_result); 14 15 /* 最初にIntentを取得する*/ 16 Intent intent = getIntent(); 17 String mojiretsu = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 18 int mojisuu = intent.getIntExtra(MainActivity.EXTRA_MESSAGE3,0); 19 boolean kaigyo = intent.getBooleanExtra(MainActivity.EXTRA_BOOLEAN, false); 20 int kaigyoi = kaigyo ? 1 : 0; 21 22 /*繰り返し文字列を作成*/ 23 StringBuilder sb = new StringBuilder(); 24 while(sb.length() + mojiretsu.length() + kaigyoi <= mojisuu){ 25 sb.append(mojiretsu); 26 if(kaigyo){ 27 sb.append(mojiretsu); 28 } 29 } 30 31 /*表示*/ 32 TextView textView3 = findViewById(R.id.textView3); 33 TextView textView4 = findViewById(R.id.textView4); 34 TextView editText4 = findViewById(R.id.editText4); 35 textView3.setText(mojiretsu); 36 textView4.setText(mojisuu); 37 editText4.setText(new String(sb)); 38 } 39}

試したこと

インターネットで調べてみると、このような事態になっている方は何人かいらっしゃるようでしたが、初めてAndroidでアプリを作る私にはよく理解できませんでした。

補足情報(FW/ツールのバージョンなど)

製作環境はWindows版のAndroid Studio(ターゲットはAndroid4.4)、実行環境はNexus5X(Android8.1)のADBとGalaxyS8(Android8.0)の実機です。

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

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

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

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

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

YamakawaJunichi

2018/08/30 01:15

アプリ停止時のエラーログを追記してください。
gobou0912

2018/08/30 03:40

ご指摘ありがとうございます 訂正しました
keicha_hrs

2018/08/30 03:53

停止時の端末のスクリーンショットではなく、アプリがエラーを起こしたときにLogCatに表示されていたエラーの提示が求められます
gobou0912

2018/08/30 04:16

ご指摘ありがとうございます LogCatもわからずに考えようとしておりました 申し訳ございませんでした(それでもわかりませんが)
keicha_hrs

2018/08/30 04:32

いや、なぜソースコードを引っ込めてしまうのでしょうか・・・。
gobou0912

2018/08/30 04:39

申し訳ございません 文字数が足りなくなりまして... xmlには問題がなさそうでしたからそちらを消させていただきます
guest

回答3

0

ベストアンサー

こちらと同じ症状のようです。
http://ksoichiro.blogspot.com/2011/05/android-resourcesnotfoundexception.html

DisplayResultActivity.java 36行目の
textView4.setText(mojisuu);
textView4.setText(String.valueOf(mojisuu)); にしてみてください。

投稿2018/08/30 04:34

YamakawaJunichi

総合スコア630

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

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

gobou0912

2018/08/30 04:41

ありがとうございます! 思った通りに動作し、エラーもなくなりました! int型の値をsetTextの引数にしたことが問題ということですね 今後気を付けたいと思います
YamakawaJunichi

2018/08/30 04:44

それにしても、setTextにintを渡すと文字列リソースを探しに行って無かったら例外投げるってなんとも不親切ですよね・・・
guest

0

エラーログの見方について。一見、大量に文字列が表示されて戸惑ってしまうかもしれません。これはバックトレースと呼ばれるもので、最終的にエラーでプログラムが異常終了した地点から、呼び出しメソッドを遡ったものが表示されています。この中から、自分が作成したものとその前後を抜き出すだけでも、エラー発生箇所の目星はつけることができます。

今回で言えば、

at android.widget.TextView.setText(TextView.java:5496) at com.sample.stringloop.DisplayResultActivity.onCreate(DisplayResultActivity.java:36)

という部分から、DisplayResultActivity.javaの36行目から呼び出されたsetTextメソッドの処理でエラーが発生していることが推測できます。すでに回答がでていますが、このsetTextの引数にint型の数値を与えてしまったことが原因なのでしょう。

setTextメソッドにint型の数値を与えると、それをリソースIDと見なして処理を行おうとします。リソースIDとは、R.javaという自動生成ファイルに作成されるもので、レイアウトを作成したり、string.xmlに文字列を追加したりしたときに新たなIDが追加されます。R.layout.activity_mainもその仲間です。これらの実体はint型の数値です。setTextの引数にint型の数値を与えると、こうしたリソースIDとして処理しようとします。その対象が存在しないと、エラーを発生してアプリが落ちてしまうわけです。

投稿2018/08/30 04:58

keicha_hrs

総合スコア6766

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

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

gobou0912

2018/08/30 05:32

ご親切にありがとうございます! 今後必要な知識だと思うのでぜひ覚えておきます!!
guest

0

部分的な回答で申し訳ないですが、一応画面遷移の問題について。
画像のInteger.parceIntは対象文字列が数字だった場合にint型に変換するものだと思いますが、中に数字以外のものが入っていた場合int型に変換できないですから、例外が発生しアプリが落ちます。
試しに画像のように"12"に置き換えたところ画面遷移には成功しました。
ただ、StringBuilderのところをコメントアウトしていたうちはよかったのですが、外すと画面が暗転します。

あと、エラーチェックの仕方は誰も教えちゃくれませんが、エラーログを見るか、見てもわからない場合は画像のように一部を残して他を全てコメントアウトしてどこの部分が問題を起こしているか特定する方法はあります。
今回の場合は画面遷移が問題なので、intent付近か、遷移先のonCreateやlayoutファイルに問題があるだろうと目星をつけて、片っ端からコメントアウトしていけば大体なんとかなります。
イメージ説明

投稿2018/08/30 04:28

shal0ne

総合スコア51

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

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

gobou0912

2018/08/30 04:42

ありがとうございます! コメントアウトを用いて問題を検証するのですね! 今後用いていきたいと思います
shal0ne

2018/08/30 05:03

あれ、画像見てなかったけどよく見たらめっちゃ的外れな回答してましたねすみません。。。 せめて役に立つ知識として、marginはいちいちmarginBottom=,marginTopなど方位を指定しなくてもmargin="16dp"としてあげれば全方位のmarginが16dpになってくれます。 上下のみ16dpにしたい場合はmarginVertical="16dp"とすればTopとBottomが16dpになってくれます。
gobou0912

2018/08/30 06:18

いえいえ、今後必ず必要な知識ですので参考にさせていただきます! レイアウトは今はAndroid StudioでDesignタブで編集しています でもxmlテキストのほうの意味も追々しっておくべきですね~
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問