Android:程序类型已存在:android.arch.lifecycle.LiveData $ LifecycleBoundObserver

时间:2018-07-11 05:10:29

标签: android android-recyclerview android-livedata

我已经找到了一些答案,但与不兼容或相似的Firebase和实时数据有关。我简单的测试应用程序与Firebase无关。

这是我在模块级别的gradle文件:

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "room.exercise.com.myapplication"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:recyclerview-v7:27.1.1'

    //Design for room persistance storage
    implementation 'android.arch.persistence.room:runtime:1.0.0'
    annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
    /////

    //Design for live data
    implementation "android.arch.lifecycle:extensions:1.0.0"
    annotationProcessor "android.arch.lifecycle:compiler:1.0.0"
    //

    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

此应用程序只是对Room和Live数据的简单测试,我将数据从数据库加载到recyclerView。.我知道Room数据库正在工作,这是我的第一个测试。

gradle文件已同步,没有问题。当我编译并运行应用程序时发生错误。

  

程序类型已存在:android.arch.lifecycle.LiveData $ LifecycleBoundObserver   消息{种类=错误,文本=程序类型已存在:android.arch.lifecycle.LiveData $ LifecycleBoundObserver,来源= [未知来源文件],工具名称= Optional.of(D8)}

代码:

public class RoomActivity extends AppCompatActivity implements View.OnLongClickListener {

private StudentListViewModel viewModel;

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

    setContentView(R.layout.activity_room);

    //RoomDatabase database = RoomDatabase.getDatabase(RoomActivity.this);
    //RoomDataInitializer.AddSampleDataAsync(database);

    //List<StudentEntity> students = database.studentDAO().getAllStudents();
    //Log.w("Room Activity", "Count = " + students.size());

    RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
    final RecyclerViewAdapter adapter = new RecyclerViewAdapter(new ArrayList<StudentEntity>(), this);
    recyclerView.setAdapter(adapter);

    viewModel = ViewModelProviders.of(this).get(StudentListViewModel.class);

    viewModel.getStudentList().observe(RoomActivity.this, new Observer<List<StudentEntity>>()
    {
        @Override
        public void onChanged(@Nullable List<StudentEntity> studentEntities) {
            adapter.addItems(studentEntities);
        }
    });

}

@Override
public boolean onLongClick(View v) {
    return false;
}

}

1 个答案:

答案 0 :(得分:7)

只需尝试一下:

implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

implementation 'android.arch.persistence.room:runtime:1.1.1'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'

代替您的版本。

我对此解决方案没有可解释的解释,但是,我会尝试的。

当一个类由2个或更多依赖项定义/引入时,会发生此类错误。 (在您的情况下为LifecycleBoundObserver)。

并且这种类型的错误仅在运行时发生。它们在gradle构建/同步过程中不会发生。

如果此类错误发生在firebase / android依赖项中,则大多数错误可以通过升级版本来解决。 (或者可能在问题跟踪器中为此注册了一个问题。)。在其他情况下,您可能必须从依赖项中排除模块/组,从而引入冗余类。