2

I'm using the example in this Android Developers Document to try to implement an "Action Drawer". The project compiles, but upon loading, it immediately crashes. The sample app runs, and I've tried to copy all the relevant parts almost verbatim. Can anybody explain why it can't instantiate/inflate the class?

Error messages on xml layout file:

The following classes could not be instantiated: - android.support.wearable.view.drawer.WearableActionDrawer

The following classes could not be found: - android.support.wear.widget.drawer.WearableDrawerLayout

Stack trace:

08-05 15:57:46.287 3993-3993/com.mendonphoto.abeddes.run2gps E/AndroidRuntime: FATAL EXCEPTION: main Process: com.mendonphoto.abeddes.run2gps, PID: 3993 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mendonphoto.abeddes.run2gps/com.mendonphoto.run2gps.MainActivity}: android.view.InflateException: Binary XML file line #301: Binary XML file line #301: Error inflating class android.support.wearable.view.drawer.WearableActionDrawer at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: android.view.InflateException: Binary XML file line #301: Binary XML file line #301: Error inflating class android.support.wearable.view.drawer.WearableActionDrawer Caused by: android.view.InflateException: Binary XML file line #301: Error inflating class android.support.wearable.view.drawer.WearableActionDrawer Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:430) at android.view.LayoutInflater.createView(LayoutInflater.java:645) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:518) at android.view.LayoutInflater.inflate(LayoutInflater.java:426) at android.view.LayoutInflater.inflate(LayoutInflater.java:377) at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:412) at android.app.Activity.setContentView(Activity.java:2414) at com.mendonphoto.run2gps.MainActivity.setLayout(MainActivity.java:646) at com.mendonphoto.run2gps.MainActivity.onCreate(MainActivity.java:680) at android.app.Activity.performCreate(Activity.java:6682) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0 at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:190) at android.content.res.Resources.getDrawable(Resources.java:770) at android.content.res.Resources.getDrawable(Resources.java:742) at android.support.wearable.view.drawer.WearableActionDrawerMenu$WearableActionDrawerMenuItem.setIcon(WearableActionDrawerMenu.java:268) at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:441) at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:494) at android.view.MenuInflater.parseMenu(MenuInflater.java:190) at android.view.MenuInflater.inflate(MenuInflater.java:111) at android.support.wearable.view.drawer.WearableActionDrawer.(WearableActionDrawer.java:163) 08-05 15:57:46.288 3993-3993/com.mendonphoto.abeddes.run2gps E/AndroidRuntime: at android.support.wearable.view.drawer.WearableActionDrawer.(WearableActionDrawer.java:106) at android.support.wearable.view.drawer.WearableActionDrawer.(WearableActionDrawer.java:102) ... 26 more

Here's the layout in my xml file:

<android.support.wear.widget.drawer.WearableDrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.mendonphoto.run2gps.MainActivity"
tools:deviceIds="wear">

...a bunch of stuff

</android.support.wear.widget.drawer.WearableDrawerLayout>

And my build.gradle file:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "com.mendonphoto.abeddes.run2gps"
        minSdkVersion 25
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.support:wearable:2.0.3'
    compile 'com.google.android.wearable:wearable:2.0.3'
    compile 'com.google.android.gms:play-services-wearable:11.0.2'
    compile 'com.google.android.gms:play-services-location:11.0.2'
    compile 'com.android.support:support-v13:25.3.1'
rainrunner
  • 118
  • 1
  • 9
  • added in version 26.0.0-beta2 – Elias Fazel Aug 05 '17 at 23:17
  • The example project uses version 25. Its build.gradle contains: "android { compileSdkVersion 25 buildToolsVersion "25.0.3"..." I'm confused... – rainrunner Aug 05 '17 at 23:28
  • I tried to simulate on a device running 26, and it fails the same way. – rainrunner Aug 05 '17 at 23:58
  • This error might happen if you set background images to your LinearLayout and Button of your xml because one of those images are giving [OutOfMemoryError](https://docs.oracle.com/javase/7/docs/api/java/lang/OutOfMemoryError.html). From this [thread](https://stackoverflow.com/a/40146171/5832311), try reducing size of your image or change it. Here's another [post](https://stackoverflow.com/questions/25719620/how-to-solve-java-lang-outofmemoryerror-trouble-in-android) for additional information. – abielita Aug 06 '17 at 14:17

3 Answers3

3

If you're using AndroidX, this import should be:

androidx.wear:wear:[version]

And the XML should reference the following fully qualified path:

<androidx.wear.widget.drawer.WearableDrawerLayout …

See also the AndroidX migration guide.

Paul Lammertsma
  • 37,593
  • 16
  • 136
  • 187
0

I figured out that I was missing the "android:icon" flags in the drawer menu xml file. Apparently, icons are required for an action drawer.

rainrunner
  • 118
  • 1
  • 9
0

I had the same problem and now solved it.
I think you should use com.android.support:wear.

Like this

provided 'com.google.android.wearable:wearable:2.0.5'
compile 'com.android.support:wear:26.1.0'

Read this document.
https://developer.android.com/training/wearables/ui/wear-ui-library.html

kirimin
  • 1
  • 4