Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AppCompativeActivity未实现LifecycleOwner_Java_Android_Android Architecture Components_Android Architecture Lifecycle - Fatal编程技术网

Java AppCompativeActivity未实现LifecycleOwner

Java AppCompativeActivity未实现LifecycleOwner,java,android,android-architecture-components,android-architecture-lifecycle,Java,Android,Android Architecture Components,Android Architecture Lifecycle,我正在使用Android支持库26.1.0。这些是应用程序模块中的依赖项- implementation "android.arch.lifecycle:runtime:1.0.0" implementation "android.arch.lifecycle:extensions:1.0.0-beta1" implementation "android.arch.persistence.room:rxjava2:1.0.0-beta1" implementation "android.arch

我正在使用Android支持库26.1.0。这些是应用程序模块中的依赖项-

implementation "android.arch.lifecycle:runtime:1.0.0"
implementation "android.arch.lifecycle:extensions:1.0.0-beta1"
implementation "android.arch.persistence.room:rxjava2:1.0.0-beta1"
implementation "android.arch.lifecycle:common-java8:1.0.0-beta1"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-beta1"
但当我尝试使用ViewModel时,如下图所示-

mUserViewModel.getUsers().observe(this,
            (Observer<Resource<List<UserView>>>) listResource -> {
                if(listResource != null){
                    this.handleDataState(listResource.status, listResource.data, listResource.message);
                }
            });
这是ViewModel类

import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;

import com.github.amitkma.boilerplate.domain.interactor.GetUserList;
import com.github.amitkma.boilerplate.domain.model.User;
import com.github.amitkma.boilerplate.presentation.data.Resource;
import com.github.amitkma.boilerplate.presentation.data.ResourceState;
import com.github.amitkma.boilerplate.presentation.mapper.UserMapper;
import com.github.amitkma.boilerplate.presentation.vo.UserView;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import io.reactivex.subscribers.DisposableSubscriber;

public class UserViewModel extends ViewModel {

    private final GetUserList mGetUserList;
    private final UserMapper mUserMapper;

    @Inject
    public UserViewModel(GetUserList getUserList,
            UserMapper userMapper) {
        mGetUserList = getUserList;
        mUserMapper = userMapper;
        fetchUsers();
    }

    public void fetchUsers(){
        mUserMutableLiveData.postValue(new Resource(ResourceState.LOADING, null, null));
        mGetUserList.execute(new UserSubscriber(), null);
    }

    public LiveData<Resource<List<UserView>>> getUsers(){
        return mUserMutableLiveData;
    }

    @Override
    protected void onCleared() {
        mGetUserList.dispose();
        super.onCleared();
    }

    private final MutableLiveData<Resource<List<UserView>>> mUserMutableLiveData =
        new MutableLiveData<>();
导入android.arch.lifecycle.LiveData;
导入android.arch.lifecycle.MutableLiveData;
导入android.arch.lifecycle.ViewModel;
导入com.github.amitkma.boilerplate.domain.interactior.GetUserList;
导入com.github.amitkma.boilerplate.domain.model.User;
导入com.github.amitkma.boilerplate.presentation.data.Resource;
导入com.github.amitkma.boilerplate.presentation.data.ResourceState;
导入com.github.amitkma.boilerplate.presentation.mapper.UserMapper;
导入com.github.amitkma.boilerplate.presentation.vo.UserView;
导入java.util.ArrayList;
导入java.util.List;
导入javax.inject.inject;
导入io.reactivex.subscribers.DisposableSubscriber;
公共类UserViewModel扩展了ViewModel{
私有最终GetUserList mGetUserList;
私有最终用户映射器mUserMapper;
@注入
公共用户视图模型(GetUserList GetUserList,
用户映射器(用户映射器){
mGetUserList=getUserList;
mUserMapper=userMapper;
fetchUsers();
}
公共用户(){
postValue(新资源(ResourceState.LOADING,null,null));
mGetUserList.execute(newusersubscriber(),null);
}
公共LiveData getUsers(){
返回mUserMutableLiveData;
}
@凌驾
已清除的受保护的void(){
mGetUserList.dispose();
super.onCleared();
}
私有最终可变LiveData mUserMutableLiveData=
新的MutableLiveData();

}

您不再需要执行此操作

只需通过扩展LifecycleOwner的AppCompatActivity扩展您的活动

API级别1.0.0中不推荐使用此接口。使用 android.support.v7.app.AppCompatActivity扩展LifecycleOwner, 所以这个类没有用例

你忘了覆盖

private final LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);

@Override
public LifecycleRegistry getLifecycle() {
    return lifecycleRegistry;
}
您至少需要支持Lib

碎片也一样。只需通过扩展android.support.v4.app.Fragment的
LifecycleFragment
来扩展您的片段即可

编辑:刚刚用Kotlin重建了一个快速示例项目,它成功了

class MainActivity : AppCompatActivity(), HasSupportFragmentInjector, AnkoLogger {
    private val lifecycleRegistry by lazy { android.arch.lifecycle.LifecycleRegistry(this) }
    private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory).get(BridgesVm::class.java) }
    override fun getLifecycle() = lifecycleRegistry

    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewModel.data.observe(this, Observer<Bridge?> { info { "Received" } })
   }
}

class BridgesVm @Inject constructor() : ViewModel() { 
        val data: LiveData<Bridge> = MutableLiveData<Bridge>()
}
class MainActivity:AppCompatActivity(),HasSupportFragmentInjector,AnkoLogger{
lazy{android.arch.lifecycle.lifecycleRegistry(this)}提供的私有val lifecycleRegistry
由lazy{ViewModelProviders.of(这是viewModelFactory.get(BridgesVm::class.java)}生成的私有val viewModel
重写fun getLifecycle()=生命周期注册表
创建公共覆盖乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
viewModel.data.observe(这个,观察者{info{“Received”})
}
}
类BridgesVm@Inject构造函数():ViewModel(){
val data:LiveData=MutableLiveData()
}
编辑:


使用arch版本beta1时出现问题。考虑使用1.0.0 alpHA9-1直到这是固定的。在我的例子中,如果我使用beta1,它将不起作用,但是使用alpha 9-1,这里有相同的问题,所以我必须更新我的androidx.appcompat依赖项,如下所示:

implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'

使用android jetpack,它会解决您的问题

implementation 'androidx.appcompat:appcompat:1.1.0-rc01'

你需要发布更多的代码。显示活动的导入和类定义。我已经添加了代码。请看一看。除了在ViewModel中导入不需要的DisposableSubscriber之外,我没有看到任何问题。我没有粘贴内部Subscriber类,因为它与此问题无关。请尝试将arch版本设置为1.0.0-alpha9-1。我添加了活动和ViewModel类代码。请调查一下。确保覆盖getLifecycle()。我已经尝试过了。LifecycleRegistry mLifecycleRegistry=新的LifecycleRegistry(此);问题是一样的。这意味着LifecycleRegistry(LifecycleOwner)无法应用于packageName.BrowseActivity更新了我的代码并重建了一个非常快速的示例,它正在工作。请尝试使缓存无效,并仔细检查gradle文件
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'