使用抽屉然后处理 类 和链接文件资源时出错

Errors while using the drawer and then coping classes and linking file resources

我想为我的 Sony Smartwatch 3 创建一个 Android 应用程序,但对 Android Studio 以及如何处理不同的文件以使其正常工作几乎一无所知。

这就是我从 Android 开发人员指南开始的原因(一个困难且一点也不精确的指南 ("creating and running a wearable app"))。

正如您可能猜到的,我的这个 Android Wear 设备不支持当前的 API 所以我无法完全实现指南中描述的代码,不得不调整 APIs 和依赖关系,这对像我这样的非专业人士来说是一项艰巨的工作。我似乎已经开始工作了,我实际上可以在我的手表上显示带有自定义文本的应用程序。

目前情况: 然后是我想做的下一步,实现一个抽屉,这样我就可以在向上滑动时进入一个新菜单。因此,我看了 "Navigation and Actions with Wear 2.0",一个更适合初学者的教程,但基于他们提供的一个项目,该项目是针对圆形智能手表的,所以我不能轻易使用它,不得不坚持更详细的 support page 关于抽屉的 Android 开发人员。

问题 1:(我希望)我像那里说的那样实现了抽屉代码,现在我收到链接文件资源失败的编译器错误,但我不知道为什么。我在 Whosebug 上有类似答案的用户所指向的 acitvity_main.xml 中找不到任何线索。

问题 2: 另外,导航抽屉适配器存在这个问题,它链接到 class 我在开发者支持页面上实现了,然后导致MainActivity.java.

中不可实例化的 class

我很抱歉要阅读这么多的文字,而错误的例子却这么少! 我认为查看这些文件会更清楚。我上传了项目 here 希望你能告诉我我能做些什么来让它工作。

我实际上不知道如何继续这个项目,我想我不能更容易地开始这个目标来创建一个 Wear 应用程序,希望任何人有勇气给我一个提示。

错误截图:

Logcat:

org.gradle.tooling.BuildException: Could not run build action using Gradle distribution 'https://services.gradle.org/distributions/gradle-4.4-all.zip'. at org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:51) at org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:29) at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:41) at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor.run(DefaultAsyncConsumerActionExecutor.java:57) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.StoppableExecutorImpl.run(StoppableExecutorImpl.java:46) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:745) ...

Caused by: org.gradle.internal.exceptions.LocationAwareException: A problem occurred configuring project ':app'. at org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:74)

...

Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'. at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94) at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:89)

...

Caused by: java.lang.IllegalStateException: Failed to find Build Tools revision 27.0.3 at com.android.builder.sdk.DefaultSdkLoader.getTargetInfo(DefaultSdkLoader.java:176) at com.android.build.gradle.internal.SdkHandler.initTarget(SdkHandler.java:182) at com.android.build.gradle.BasePlugin.ensureTargetSetup(BasePlugin.java:885) at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:702) at com.android.build.gradle.BasePlugin.lambda$null(BasePlugin.java:652) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:81)

提前致谢!

您的项目有几个错误!在 MainActivity.java 上,您有一个 onCreate() 方法的副本:

  • 安装构建工具或改用版本 28

  • mWearableNavigationDrawer = findViewById(R.id.to_navigation_drawer);无法解决,因为您没有具有该 ID 的布局!相反,你有 top_drawer (我猜)作为你的 WearableNavigationDrawer

  • 的 ID
  • mWearableNavigationDrawer.setAdapter(YourImplementationnavigationAdapter); 也会报错,这里需要一个表达式,也就是你的适配器。类似于:mWearableNavigationDrawer.setAdapter(new YourImplementationNavigationAdapter(this));

由于 YourImplementationNavigationAdapter 是抽象的,您需要像下面这样实现它的方法:

mWearableNavigationDrawer.setAdapter(new YourImplementationNavigationAdapter(this){ 
     @Override
        public CharSequence getItemText(int i) {
            return null;
        }

            @Override
            public Drawable getItemDrawable(int i) {
                return null;
            }

            @Override
            public int getCount() {
                return 0;
            }
        });
  • activity_main.xml 中,您应该注释 out/remove 这一行:app:actionMenu="@menu/action_drawer_menu 这引用了资源文件夹中不存在的菜单文件夹中的项目。或者你应该创建它。

  • activity_main_backup.xml

  • 同上

更正这些,您的项目现在应该可以构建了。只需单击重建项目。

更新:

您的 MainActivity.java 应该如下所示:

public class MainActivity extends WearableActivity implements MenuItem.OnMenuItemClickListener {

private WearableDrawerLayout mWearableDrawerLayout;
private WearableNavigationDrawerView mWearableNavigationDrawer;
private WearableActionDrawerView mWearableActionDrawer;


@Override
public boolean onMenuItemClick(MenuItem item) {
    return false;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Top navigation drawer
    mWearableNavigationDrawer = (WearableNavigationDrawerView) findViewById(R.id.top_drawer);
    mWearableNavigationDrawer.setAdapter(new YourImplementationNavigationAdapter(this) {
        @Override
        public CharSequence getItemText(int i) {
            return null;
        }

        @Override
        public Drawable getItemDrawable(int i) {
            return null;
        }

        @Override
        public int getCount() {
            return 0;
        }
    });
    // Peeks navigation drawer on the top.
    mWearableNavigationDrawer.getController().peekDrawer();
    // Bottom action drawer
    mWearableActionDrawer = (WearableActionDrawerView) findViewById(R.id.bottom_action_drawer);
    // Peeks action drawer on the bottom.
    mWearableActionDrawer.getController().peekDrawer();
    mWearableActionDrawer.setOnMenuItemClickListener(this);

}
}