M1 Mac(Apple Silicon )は64ビットARM
Android Studioバージョン:android-studio-2023.1.1.28-mac_arm.dmg
この辺のバージョンにするとYoutube等で説明されているスクリプトと若干違う部分が良く出てくるようになる。そのため前に進めないときがあるが、以下の部分ではうまくいった。
switch文を使うとエラーになる、解決はif文にすること
switchのcase文にR.idを入れたらエラーになるらしい、定数として扱えないということらしい。
<例題1>
以下はswitch文でメニューを切り替えているが、新しいAndroid Studioではエラーになる。
private void bottomMenu() { chipNavigationBar.setOnItemSelectedListener(new ChipNavigationBar.OnItemSelectedListener() { @Override public void onItemSelected(int i) { Fragment fragment = null; switch (i) { case R.id.home: fragment = new MyNotesFragment(); break; case R.id.reminder: fragment = new ReminderFragment(); break; case R.id.shopping_list: fragment = new ShoppingListFragment(); break; } getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit(); } }); }
以下のようにif文にすると問題なく使えるようになる。下のバー内のアイコンを「i」が、1番目、2番目を選択した状態を表している。
private void bottomMenu() { chipNavigationBar.setOnItemSelectedListener(new ChipNavigationBar.OnItemSelectedListener() { @Override public void onItemSelected(int i) { Fragment fragment = null; if (i == R.id.home) { fragment = new MyNotesFragment(); }else if (i == R.id.reminder){ fragment = new ReminderFragment(); }else { fragment = new ShoppingListFragment(); } getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit(); } }); }
<例題2>
以下も case (R.id.roombtnadd): で R.id.roombtnaddに赤波線が入りエラーになってビルドできない。
v.getId()というのはidを取得するわけだから、そのidと同じだったらどうするかということになる。
@Override public void onClick(View v) { switch (v.getId()) { //ボタンにクリック時の機能を実装する //loaddbにデータが保存されていない時の処理を追加する case (R.id.roombtnadd)://追加ボタンが押された時 writedb();//データを書き込む break; } }
if文にすると問題なくビルドできるようになる。最初の3番めの行を外してbuttonIdのところに直接「v.getId()」を入れても良い。しかしif文が続く場合はこれが分かりやすいと思う。
この場合、ボタンのid名が「roombtnadd」なら{}内を実行するということになる。
@Override public void onClick(View v) { int buttonId = v.getId();//idをゲットする if(buttonId == R.id.roombtnadd){ writedb();//データを書き込む }
Roomの依存設定
dependenciesに入れる場合は implementation(”◯◯◯◯◯◯◯◯”)とする必要がある。
implementation("androidx.room:room-runtime:2.3.0") annotationProcessor("androidx.room:room-compiler:2.3.0")
maven { url ‘https://jitpack.io’ }を入れる場合、一番上でなく一番下の「settings.gradle.kts」に入れて以下のように記述する必要がある。
maven { url = uri(“https://jitpack.io”) }
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url = uri("https://jitpack.io") } } }
M1 Macでerror: java.lang.ExceptionInInitializerErrorと出る
M1 Macの場合これはRoomのバージョンが2.3.0で出るようだ、以下のように最新2.6.1に変更したらビルドできた。
implementation(“androidx.room:room-runtime:2.6.1“)
annotationProcessor(“androidx.room:room-compiler:2.6.1“)