1
我想從Android開發者網站的這個鏈接的代碼,並面臨着一些問題:的Android架構的代碼不工作
https://developer.android.com/topic/libraries/architecture/guide.html
Here is my code:
public class UserProfileFragment extends LifecycleFragment {
private static final String UID_KEY = "uid";
private UserProfileViewModel viewModel;
public UserProfileFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_user_profile, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// String userId = getArguments().getString(UID_KEY);
viewModel = ViewModelProviders.of(this).get(UserProfileViewModel.class);
//ViewModelProviders.of(this, viewModelFactory).get(MoviesDataViewModel.class);
viewModel.init();
viewModel.getUser().observe(this, user -> {
Log.i("UI","Update ui");
});
}
}
public class UserProfileViewModel extends ViewModel {
private LiveData<User> user;
private UserRepository userRepo;
@Inject // UserRepository parameter is provided by Dagger 2
public UserProfileViewModel(UserRepository userRepo) {
this.userRepo = userRepo;
}
public UserProfileViewModel() {
}
public void init() {
if (this.user != null) {
// ViewModel is created per Fragment so
// we know the userId won't change
return;
}
user = userRepo.getUser();
}
public LiveData<User> getUser() {
return this.user;
}
}
public class UserRepository {
private Webservice webservice;
// ...
public LiveData<User> getUser() {
// This is not an optimal implementation, we'll fix it below
final MutableLiveData<User> data = new MutableLiveData<>();
webservice.getUser().enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
// error case is left out for brevity
data.setValue(response.body());
}
@Override
public void onFailure(Call<User> call, Throwable t) {
t.printStackTrace();
}
});
return data;
}
}
的userRepo對象在UserProfileViewModel類來爲空。此代碼:
public UserProfileViewModel(UserRepository userRepo) {
this.userRepo = userRepo;
}
根本沒有得到執行。我也是Dagger2的新手。任何幫助將不勝感激。在原帖中沒有提及相同的內容,因此我被卡住了。
非常感謝您的回覆。這對我有效。 –