V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yatsun
V2EX  ›  问与答

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

  •  
  •   yatsun · 2019-03-21 00:01:40 +08:00 · 972 次点击
    这是一个创建于 2077 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 函数貌似也没有用,谢谢各位大佬
    3 条回复    2019-03-21 22:05:28 +08:00
    Android2MCU
        1
    Android2MCU  
       2019-03-21 00:26:22 +08:00 via iPhone
    在更新数据那里加个更新成功的回调咯
    yatsun
        2
    yatsun  
    OP
       2019-03-21 22:01:14 +08:00
    @Android2MCU 怎么加啊,是 new 一个线程然后在线程内更新吗?
    yatsun
        3
    yatsun  
    OP
       2019-03-21 22:05:28 +08:00
    是使用 handler 吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1148 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:57 · PVG 02:57 · LAX 10:57 · JFK 13:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.