Lesson5 Android開発 -cursorのせいで落ちまくる- アンドロイド,techacademy

Lesson5 Android開発 -cursorのせいで落ちまくる- アンドロイド,techacademy

今日はLesson5を進めていきます。

4週間プランだから時間が無い。急ぐぞ!

※OSはWindows7

Android Studioは2.3

スポンサーリンク
広告

 Lesson5:Android開発

エラーとデバッグ

どうやらエラーが出たときはlogcatの

Caused by~

の所を見れば良いようです。

MainActivity.java の何行目が間違えているのかも教えてくれるようで、

かなり便利そうです。

課題:スライドショーアプリ

この課題Cursorの使い方に嵌って、かなり時間が掛かってしまいました。

Cursorに翻弄される

まず、カリキュラムを参考に[進む][戻る]機能を実装してみたのですが、

アプリが落ちまくります。

logcatで「caused」と検索すると、どうやら

Cursorをメンバ変数にしている行に問題があるようです。

ここから私は丸一日Cursorをメンバ変数として使用せず

コーディングを続ける訳ですが、

どうしても画像を2枚以上取得することができませんでした。

原因は、クリックされる度にcursorが生成&位置がリセットされて、

moveToNext()しても2枚目の画像しか取って来れないから?

Log.d("ANDROID", "URI : " + imageUri.toString());

をbutton1の所に入れると、button1を何回押しても同じURIを取得するので、

多分そうだと思います。

じゃあ、一回目のクリックの時だけ、Cursorを生成しよう。

でもこれだとif内のcursor1が反映されず、エラーになってしまうんですよね。

じゃあ、戻り値使う?

これもif内のcursor1が反映されずエラー。

アプリの起動すらできない。。

行き詰まり、再度試しにCursorをメンバ変数に置いてみると、、

やっと複数の画像が取れるようになりました。

長かった。。

なんで、最初落ちたんだ。。。

色々いじりすぎて、原因は不明です。

if(cursor.moveToNext())は勝手に進む

ifの中に.moveToNext()や.moveToPrevious()を入力した場合は、

これがtrue or false で返ってくるようです。

また、true or false判定後に自動で実行されているようですので、

再度.moveToNext()をする必要はありませんでした。

ループは.moveToFirst()とか.moveToLast()を使いました。

ボタンを押せなくする

再生中は他のボタンを押せなくする必要がありますので、

私は.setEnabled()メソッドを使用しました。

button..setEnabled(false)で、そのボタンが押せなくなります。

ボタンのテキスト変更

button.setText()を使用しました。

無限許可要求

以下のコードをパーミッションが拒否された場合の所に書き加えました。

これで許可されるまで要求できます。

Toast.makeText(this,"許可してください",Toast.LENGTH_SHORT).show();
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_CODE);

参考にした記事

Android 6.0のRuntime Permissionに対応する

ランキング
スポンサーリンク
広告
広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする