【问题标题】:Errors while using the drawer and then coping classes and linking file resources使用抽屉然后处理类和链接文件资源时出错
【发布时间】:2018-08-23 00:12:20
【问题描述】:

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

这就是我从 Android 开发者指南开始的原因(一个困难且完全不准确的指南(“创建和运行可穿戴应用程序”))。

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

目前的情况: 然后是我想做的下一步,实现一个抽屉,这样我可以在向上滑动左右时进入一个新菜单。因此,我查看了“Wear 2.0 的导航和操作”,这是一个更适合初学者的教程,但基于他们提供的用于圆形智能手表的项目,所以我不能轻易使用它,不得不坚持更详细的support page Android 开发者关于抽屉。

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

问题 2: 另外,导航抽屉适配器存在这个问题,它链接到我在开发人员支持页面上实现的类,然后导致MainActivity.java 中的类不可实例化.

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

我实际上不知道如何在项目中继续前进,我想我的目标是创建一个 Wear 应用程序并不能更轻松地开始,希望有人有勇气给我一个提示。

错误截图:

Logcat:

org.gradle.tooling.BuildException:无法使用 Gradle 分发“https://services.gradle.org/distributions/gradle-4.4-all.zip”运行构建操作。 在 org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:51) 在 org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:29) 在 org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:41) 在 org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:57) 在 org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) 在 org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 在 java.lang.Thread.run(Thread.java:745) ...

引起:org.gradle.internal.exceptions.LocationAwareException:A 配置项目“:app”时出现问题。在 org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:74)

...

原因:org.gradle.api.ProjectConfigurationException:一个问题 发生配置项目':app'。在 org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94) 在 org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:89)

...

原因:java.lang.IllegalStateException:找不到构建工具 修订版 27.0.3 在 com.android.builder.sdk.DefaultSdkLoader.getTargetInfo(DefaultSdkLoader.java:176) 在 com.android.build.gradle.internal.SdkHandler.initTarget(SdkHandler.java:182) 在 com.android.build.gradle.BasePlugin.ensureTargetSetup(BasePlugin.java:885) 在 com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:702) 在 com.android.build.gradle.BasePlugin.lambda$null$4(BasePlugin.java:652) 在 com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:81)

提前致谢!

【问题讨论】:

标签: android android-studio build.gradle android-wear-2.0


【解决方案1】:

您的项目有几个错误!在 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 中,您应该注释掉/删除此行: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);

}
}

【讨论】:

  • 好的,感谢您的努力!我开始进行更改,但可能不得不再次在家中检查 Build 版本(代码中没有的东西)。在工作中,我已经安装了修订版 27.0.3 的 Android SDK 构建工具,但现在重新安装了
  • 真的没有看到onCreate的重复,现在已经合并了
  • top_drawer 已在 activity_main.xml 中声明。其 ID 为WearableNavigationDrawerView
  • 我明白您在findViewById 中插入的错误 ID 是什么意思。问题是,如果我输入top_drawer,我必须在某处声明该 ID,但不知道在哪里(抱歉我的 Java 技能低)。
  • 好的,我现在明白了。但是为什么AndroidStudio不能将它解析为MainActivity中的一个符号呢?我需要再次将其创建为局部变量吗?
猜你喜欢
  • 1970-01-01
  • 2017-03-13
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多