新手求助。android 多线程中从 api 获取数据后的存储问题, 主要表现为登陆需要点两次登陆按钮才能成功,只点一次会提示错误

2019-03-21 00:01:40 +08:00
 yatsun
button_loginin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

User user = new User();
//登陆
user.setPhone(phone.getText().toString());
user.setPassword(password.getText().toString());
url = "https://www.apiopen.top/login?key=" + user.getKey() + "&phone=" + user.getPhone() + "&passwd=" + user.getPassword();
getjson(url); //获取数据并以 jsonobject 存储在 json 中
user=getUser();
if (("成功!").equals(user.getMsg())) {
intent.putExtra("user", user);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, "账号不存在或密码错误", Toast.LENGTH_SHORT).show();
}
}
});


public User getUser() {
User user1 = new User();
try {
JSONObject data1= json.getJSONObject("data"); //更新 user 内的数据
user1.setPhone(data1.getString("phone"));
user1.setCreatedTime(data1.getString("createTime"));
user1.setMsg(json.getString("msg"));
} catch (Exception e) {
// TODO: handle exception
}
return user1;
}

主要代码如上,我查了一下,大概是多线程的锅,但是新手不大懂要怎么解决,用锁的话只能锁方法吧,不知道要怎么做才能在第一次点击后,跳转之前成功更新数据?用 sleep 函数貌似也没有用,谢谢各位大佬
892 次点击
所在节点    问与答
3 条回复
Android2MCU
2019-03-21 00:26:22 +08:00
在更新数据那里加个更新成功的回调咯
yatsun
2019-03-21 22:01:14 +08:00
@Android2MCU 怎么加啊,是 new 一个线程然后在线程内更新吗?
yatsun
2019-03-21 22:05:28 +08:00
是使用 handler 吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/546801

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX