Error: Package does not exist Android Studio

Error: Package does not exist Android Studio

我是初学者 Android 开发者。

我正忙于浏览有关 DataBiding 的代码示例。我有以下 Activity:

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;

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

Error: package 'com.example.andre.vehicleasseessing.databinding' does not exist.

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

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

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

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

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

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

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

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

然后我会尝试绑定如下:

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

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

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