使用抽屉然后应付类和链接文件资源时发生错误

时间:2018-08-23 00:12:21

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

我想为我的Sony Smartwatch 3创建一个Android应用程序,几乎不了解Android Studio,以及如何处理不同文件以使事情正常进行。

这就是为什么我从《 Android开发人员指南》开始的原因(这是一个困难而又不完全准确的指南(“创建和运行可穿戴应用程序”))。

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

当前情况: 然后是下一步,我要安装一个抽屉,以便在向上滑动时可以进入一个新菜单。因此,我查看了“导航和佩戴Wear的行为2.0”,该教程更适合初学者,但基于他们提供的针对圆形智能手表的项目,因此我不能轻易使用它并且必须坚持使用关于抽屉的Android Developers support page的详细说明。

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

问题2:另外,导航抽屉适配器存在此问题,该适配器链接到我在开发人员支持页面上实现的类,然后导致在{{1 }}。

很抱歉,我阅读了这么多文字,而错误中出现的例子更少了! 我认为看一下文件会更清楚。我上传了项目here,希望您能告诉我我可以做的一切。

我实际上不知道如何继续进行该项目,我认为我对于实现Wear应用程序的目标并没有那么容易,并且希望有人愿意给我提示。

错误的屏幕截图: enter image description here

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)

谢谢!

1 个答案:

答案 0 :(得分:1)

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

enter image description here

  • 安装构建工具或改用版本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);

}
}