gpt4 book ai didi

安卓 Stackmob : Prompting logged in user information

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:49 25 4
gpt4 key购买 nike

我开始使用 stackmob 进行 Android 开发。我遇到了一个问题。确实在创建了用户登录的界面后,我想让我的主页在其顶部提示实际登录的用户名。

所以我使用 getloggedInUser (Class , stackMobCallBack ) 来获取我的用户。第一个问题是我无法在回拨之外联系到这个用户。所以我创建了一个从 getloggedin 用户方法的回调中调用的方法。在那里我进入了另一个问题;该方法的操作对我的观点没有影响。事实上,当主页提示时,文本保持不变(不适应登录用户)。奇怪的是,如果我减少我的应用程序然后恢复它,文本会更新。这是我的代码:

public class MainActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StackMobAndroid.init(getApplicationContext(), 0,
"XXXXX.XXXXXX.XXXXX");

TextView welcomeText = (TextView) findViewById(R.id.welcomeHead);
User.getLoggedInUser(User.class,new StackMobQueryCallback<User>(){

public void failure(StackMobException e) {

// TODO Auto-generated method stub
}

public void success(List<User> list) {

User loggedUserf = list.get(0);
setMyAppUser(loggedUserf);
finish();
}
});

public void setMyAppUser(User user){
String welcome = welcomeText.getText().toString();
welcome = welcome+" "+user.getUsername();
welcomeText.setText(welcome);
}
}

我已经坚持了很长时间,我猜这个问题与回调是异步方法这一事实有关,但我在我的 View 中使用了各种方法,如 invalidate 或 postinvalidate 方法来修复它......没有任何效果。

最佳答案

当您使用 StackMob 发出请求时,它将在不同的线程(而不是 UI 线程)中运行。当您想要修改/触摸/编辑您的 UI 时,您需要确保您的代码在 UI 线程中运行。因此,在您的 success 方法中,您需要执行以下操作:

runOnUiThread(new Runnable() {
@Override
public void run() {
setMyAppUser(loggedUserf);
}
});

额外:最好让所有 Activity 都扩展一个 Activity (我们称之为 BaseActivity),该 Activity 具有:

  @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (StackMob.getStackMob() == null)
StackMobAndroid.init(getApplicationContext(), 0, "XXXX");
}

为什么?这只是为了确保当您(从前台)重新打开您的应用程序时,StackMob 将始终得到初始化。

关于安卓 Stackmob : Prompting logged in user information,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com