我正在关注此文档以了解LiveData和ViewModel.在doc中,ViewModel类具有构造函数,
public class UserModel extends ViewModel {
private MutableLiveData<User> user;
@Inject UserModel(MutableLiveData<User> user) {
this.user = user;
}
public void init() {
if (this.user != null) {
return;
}
this.user = new MutableLiveData<>();
}
public MutableLiveData<User> getUser() {
return user;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行代码时,我得到异常:
final UserViewModelviewModel = ViewModelProviders.of(this).get(UserViewModel.class);
Run Code Online (Sandbox Code Playgroud)
引起:java.lang.RuntimeException:无法创建类UserViewModel的实例引起:java.lang.InstantiationException:java.lang.Class没有零参数构造函数
我从 LoginActivity 开始,登录后,我的应用程序使用 RecyclerView 转到下一个 Activity。我需要参考 Recycler View。我正在这样做,但得到null。
RecyclerView recyclerView = (RecyclerView) loginActivity.getActivity().findViewById(R.id.messages_list);
Run Code Online (Sandbox Code Playgroud)
它为空,因为 loginActivity 不包含 RecyclerView。所以,我的问题是,一旦我转到第二个活动,我该如何告诉 espresso 用新活动替换 loginActivity 以便我可以做到这一点
RecyclerView recyclerView = (RecyclerView) currentActivity.getActivity().findViewById(R.id.messages_list);
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,还有什么其他方法?
我正在使用mockwebserver进行android测试。我可以通过执行以下操作来模拟使用改造的网络服务
NetworkServiceHelper.init(String.valueOf(server.url("/")));
Run Code Online (Sandbox Code Playgroud)
但是,我无法模拟其他 SDK(例如具有基本 url https://api.layer.com/apps/的 Atlas-Layer)发出的 Web 请求。
我执行了以下操作,但请求计数仍然为 0。
MockWebServer mockWebServer = new MockWebServer();
mockWebServer.url("https://api.layer.com/apps");
mockWebServer.enqueue(new MockResponse().setBody(getStringFromFile(getInstrumentation().getContext(), "temp.json")));
getConversation("demo", "asdf"); // makes web service all using Layer SDK
mockWebServer.getRequestCount(); // Returns 0 instead of 1
Run Code Online (Sandbox Code Playgroud) 我正在学习本教程以学习ViewModel和LiveData.在我的情况下,我只是在按钮点击时生成随机字符串并尝试更新文本视图,而不是从网络获取数据.问题是当按钮单击更改数据时,textview不会更新,但只有在切换方向时才会更新.
活动类(扩展LifecycleActivity)
public class PScreen extends BaseActivity {
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.places_screen);
final UserModel viewModel = ViewModelProviders.of(this).get(UserModel.class);
viewModel.init();
viewModel.getUser().observe(this, new Observer<User>() {
@Override public void onChanged(@Nullable User user) {
((TextView) findViewById(R.id.name)).setText(user.getName());
}
});
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
final MutableLiveData<User> data = new MutableLiveData<>();
User user = new User();
user.setName(String.valueOf(Math.random() * 1000));
data.postValue(user);
viewModel.setUser(data); // Why it does not call observe()
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
ViewModel类
package timsina.prabin.tripoptimizer.model;
import …Run Code Online (Sandbox Code Playgroud) 我想跳过构建过程并直接运行测试
./gradlew connectedDevDebug
Run Code Online (Sandbox Code Playgroud)
我也可以使用adb命令,但它一次只能在一个deivce上运行测试.