java为什么postValue()不能在新线程中工作?
我调用了postValue()
,但MutableLivdata
不更新其值
当我在setNetworkObj()
和setUserName()
处打印Log in UserInfoViewModel
时,参数的值没有错误(参数很好地到达)
但是userName.getValue()
打印为空
所以我在Handler和runOnUiThread中尝试了postValue()
,但也没有任何效果
如果你能告诉我怎么解决,我将非常感激
这是我的密码
UserInfoViewModel。java
public class UserInfoViewModel extends ViewModel {
private MutableLiveData<NetworkObj> networkObj = new MutableLiveData<>();
private MutableLiveData<String> userName = new MutableLiveData<>();
public MutableLiveData<NetworkObj> getNetworkObj() {
return networkObj;
}
public void setNetworkObj(NetworkObj networkObj) {
this.networkObj.postValue(networkObj);
}
public MutableLiveData<String> getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName.postValue(userName);
}
}
后勤活动。java
public class LoginActivity extends AppCompatActivity {
private ActivityLoginBinding binding;
private UserInfoViewModel userInfoViewModel;
public Socket socket;
public ObjectInputStream ois;
public ObjectOutputStream oos;
private NetworkUtils networkUtils;
private NetworkObj networkObj;
private String userName ="";
final String ip_addr = "10.0.2.2"; // Emulator PC의 127.0.0.1
final int port_no = 30000;
Handler mHandler = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
binding = ActivityLoginBinding.inflate(getLayoutInflater());
super.onCreate(savedInstanceState);
setContentView(binding.getRoot());
userInfoViewModel = new ViewModelProvider(this).get(UserInfoViewModel.class);
mHandler = new Handler();
binding.btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userName = binding.etName.getText().toString();
new Thread() {
public void run() {
try {
socket = new Socket(ip_addr, port_no);
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
networkObj = new NetworkObj(socket, ois, oos);
networkUtils = new NetworkUtils(networkObj);
mHandler.post(new Runnable() {
@Override
public void run() {
userInfoViewModel.setNetworkObj(networkObj);
userInfoViewModel.setUserName(userName);
}
});
ChatMsg obj = new ChatMsg(userName, "100", "Hello");
networkUtils.sendChatMsg(obj, networkObj);
startMainActivity();
} catch (IOException e) {
Log.w("Login", e);
}
}
}.start();
}
});
}
public void startMainActivity() {
startActivity(new Intent(this, MainActivity.class));
}
}
共 (0) 个答案