【问题标题】:Error: Package does not exist Android Studio错误:包不存在 Android Studio
【发布时间】:2017-02-13 19:17:46
【问题描述】:

我是一名初级 Android 开发人员。

我正忙于浏览 DataBiding 上的代码示例。我有以下活动:

package com.example.andre.vehicleasseessing;
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.andre.vehicleasseessing.databinding.LoginActivityBinding;

import Common.Login;

public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LoginActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.login_activity);

        Login loginObject = new Login();
        loginObject.setEmail("test123@server.com");
        loginObject.setPassword("123456");

        binding.setLogin(loginObject);
    }
}

每当我尝试使用 LoginActivityBinding 对象时,它都会导入以下包:

import com.example.andre.vehicleasseessing.databinding.LoginActivityBinding;

在此之后,我收到以下错误:

错误:包 'com.example.andre.vehicleassessing.databinding' 确实 不存在。

我同意这个包不存在,但是这个包不存在为什么还要尝试导入呢?

【问题讨论】:

    标签: java android android-databinding


    【解决方案1】:

    我猜你有一个名为login_activity.xml 的布局。 Android Data Binding 会根据应用程序包下的数据绑定包中的布局 XML 文件的名称自动生成一个 Binding 类。由于您的应用程序的包是com.example.andre.vehicleasseessing,而您的布局是login_activity.xml,因此生成的类将是com.example.andre.vehicleasseessing.databinding.LoginActivity。

    我不确定 Android Studio 为什么会遇到困难。可能是存在缓存问题,或者您从布局 XML 文件中删除了 <layout> 标记。无论如何,在您担心太多之前,请尝试清理、编译和运行它。 Android Studio 可能只是被混淆了,但它仍然可以工作。

    仅供参考,您可以更改生成的绑定类的类名和/或包。在<data> 标签中,包含类名:

    <layout xmlns:android="...">
        <data class="com.example.andre.vehicleasseessing.LoginActivity">
            <variable .../>
        </data>
        <FrameLayout ...>
        </FrameLayout>
    </layout>
    

    【讨论】:

    • 感谢您提到 Android Studio 将绑定类添加到我的包中。我确实记得看到一些文件夹/包被添加到我的解决方案中,但不再存在,即使在清理/构建之后也是如此。谢谢
    【解决方案2】:

    这里它的基本工作原理是,您键入的所有内容都作为import 语句,它会尝试找到该包/类以将其导入您的代码,以便您可以引用它及其公开可用的成员和方法。因此,当您键入 import com.example.andre.vehicleasseessing.databinding 时,它当然会尝试将其导入您的代码中,以便您开始使用它。

    【讨论】:

    • 我相信问题是这样的“我输入 LoginActivityBinding,它会自动完成并添加导入语句。那个包不存在。”
    • 我没有导入该包,当我尝试使用 LoginActivityBinding 时,它会自动创建该导入语句。根据 Android 教程,如果我使用数据绑定,LoginActivityBinding 应该可用
    • 在 Android 和 Java 中,为了使用项目中未定义的某些类,必须将其作为导入语句导入,通常是其包。因此,为了使用 LoginActivityBinding,它应该在您的项目中定义(这意味着您正在编写自己的版本)或其他地方对吗?好了,它通过自动添加该导入来导入先前定义的版本,因此无论何时使用该类,编译器都知道它所指的位置
    • 嗯,它不存在,那么那个包应该指向哪里呢?相信我,我从未尝试过编写自己的版本...
    • @monstertjie_za 这是 IDE 的自动行为。我知道你还没有写你自己的版本。但是您必须做的是,将该包/项目显式添加到您的项目中,我想您错过了该教程中添加该内容的某些点。
    【解决方案3】:

    我自己解决了这个问题。我忘记了我重命名了用于绑定的数据变量。我的代码如下:

    <data>
        <variable
            name="login"
            type="Common.Login"/>
    </data>
    

    然后我会尝试如下绑定:

    android:text="@{oldDataSourceName.password}"/>
    

    将上面的内容改成指向我的数据变量名,解决了我的问题,如下:

    android:text="@{login.password}"/>
    

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 2014-12-12
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多