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

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

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

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

605閲覧

リストボックスで選択してからビーコン受信したい

yuko0524

総合スコア28

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/12/26 07:53

編集2018/12/26 08:30

前提・実現したいこと

ビーコンの情報を拾うシンプルなアプリを作っています。
アプリのイメージとしては、
①アプリ起動 ⇒ ②リストボックスから選択(1から25の値) ⇒ ③ビーコン電波受信開始
という流れにしたいと考えています。
今までは①からすぐ③の処理でアプリとして使用できていたのですが、
③受信前に選択肢から選ばせてから受信するように②を追加したところ、
起動しただけで落ちるようになってしまいました。
ちなみに②は選択するだけで、以降の処理の判断などに使っていません。
ログ等で選択値を出力したいだけです。
(当方、まだAndroidアプリ開発の初心者なので、とんちんかんな書き方をしているかもしれません…)

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

「問題が発生したため、ビーコン受信を終了します。」
というメッセージが返る

ログを見ると、
Caused by: kotlin.KotlinNullPointerException
at com.example.*****.myapplication.MainActivity.onResume(MainActivity.kt:104)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1258)
at android.app.Activity.performResume(Activity.java:6327)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092)
とあったので、
104行目を見ましたが、スキルが浅くてピンと来ません。

該当のソースコード

kotolin

1```ここに言語を入力 2class MainActivity : AppCompatActivity() ,BeaconConsumer { 3 4 // BeaconManager型変数の宣言 5 private var beaconManager: BeaconManager? = null 6 7 // uuidの指定 8 private val uuidString = "FDA50693-A4E2-4FB1-AFCF-C6EB07647825" 9 private val uuid = Identifier.parse(uuidString) 10 11 // ビーコンのフォーマット設定 12 private val IBEACON_FORMAT: String = "m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24" 13 14 // Handlerクラスの変数の宣言 15 private val handler: Handler = Handler() 16 17 //ここから追加: 選択肢 18 private val spinnerItems = arrayOf("1", "2", "3", "4" , "5" ,"6" , "7" , "8", "9" , "10" , 19 "11" , "12" , "13" , "14", "15", "16", "17", "18", "19", "20", "21", "22","23","24","25") 20  //一旦、ここまで追加 21 22 /************************************************** 23 * AppCompatActivity内のメソッドをoverride 24 **************************************************/ 25 // onCreate 26 override fun onCreate(savedInstanceState: Bundle?) { 27 super.onCreate(savedInstanceState) 28 setContentView(R.layout.activity_main) 29 30 31//ここから追加 32 val spinner = findViewById<Spinner>(R.id.spinner) 33 34 // ArrayAdapter 35 val adapter = ArrayAdapter(applicationContext, 36 android.R.layout.simple_spinner_item, spinnerItems) 37 38 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) 39 40 // spinner に adapter をセット 41 spinner.adapter = adapter 42 43 // リスナーを登録 44 spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { 45 // アイテムが選択された時 46 override fun onItemSelected( 47 parent: AdapterView<*>?, 48 view: View?, position: Int, id: Long 49 ) { 50 val spinnerParent = parent as Spinner 51 val item = spinnerParent.selectedItem as String 52 // Kotlin Android Extensions 53 // textView.text = item 54 Log.d("posit:", "$item") 55 56//一旦、ここまで追加 57 58 // デバイスのBLE対応チェック 59 if (!packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { 60 61 // 未対応の場合、Toast表示 62 showToast("このデバイスはBLE未対応です", Toast.LENGTH_LONG) 63 } 64 65 // API 23以上かのチェック 66 if (Build.VERSION.SDK_INT >= 23) { 67 68 // パーミッションの要求 69 checkPermission() 70 } 71 // ビーコンマネージャのインスタンスを生成 72 beaconManager = BeaconManager.getInstanceForApplication(applicationContext) 73 74 // BeaconManagerの設定 75 beaconManager!!.beaconParsers.add(BeaconParser().setBeaconLayout(IBEACON_FORMAT)) 76 } 77//再度、ここから追加 78 // アイテムが選択されなかった 79 override fun onNothingSelected(parent: AdapterView<*>?) { 80 // 81 } 82//ここまで追加 83 84 } 85 } 86 87 // onResume 88 override fun onResume() { 89 super.onResume() 90 91 // ビーコンサービスの開始 92 beaconManager!!.bind(this) 93 } 94 95 // onPause 96 override fun onPause() { 97 super.onPause() 98 99 // ビーコンサービスの停止 100 beaconManager!!.unbind(this) 101 } 102 103 override fun onBackPressed() { 104 // バックキーの無効化 105 moveTaskToBack (true) 106 } 107 108 109 /************************************************** 110 * BeaconConsumer内のメソッドをoverride 111 **************************************************/ 112 // onBeaconServiceConnect 113 override fun onBeaconServiceConnect() { 114 115・・・以降、さらに続くので割愛

試したこと

追加した位置が悪いのでしょうか?
ただ②を追加したかっただけなのですが・・・。

Layoutのほうにも、

<Spinner android:layout_width="103dp" android:layout_height="22dp" android:id="@+id/spinner" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="34dp" app:layout_constraintTop_toTopOf="parent" android:entries="@id/spinner"/>

を追加しています。

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

Android Studio V3.2.1
Kotlin 1.2.71

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

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

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

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

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

keicha_hrs

2018/12/28 02:55 編集

```で上下を挟んだコード記述の区間は、行頭空白を用いることができます。それなのにコードが全て左詰めでは難読極まりなく、それだけで回答が敬遠されてしまうでしょう。まず正しくインデントをつけていただきたいです。また、ご提示のKotlinコードは{}が正しく対応していないようです。これは実際に動かしているコードから写したものとは思えません。部分提示であったとしても、抜き出し方が良くないと思います。エラーログから推測できるのは、onResume()の中で参照しているbeaconManagerという変数の値がnullになっているからと思われます。ただ、提示コードが不正確と思われることから、なぜ初期値のnullのまま進んでしまうのかを第三者が推測するのは至難でしょう。
guest

回答1

0

自己解決

ご指摘いただき、誠にありがとうございます。
仰る通り、読みにくい状態で貼り付けてしまいました。
その後、仕様が若干変わったこともあり、質問内容にズレが生じてきましたので
一旦閉じさせていただきます。
きっとまた躓くと思いますので、その際はご指摘いただいたことを意識して投稿いたします。
ありがとうございました。

投稿2018/12/28 03:11

yuko0524

総合スコア28

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問