gpt4 book ai didi

java - 如何设置从数据库获取数据的超时?

转载 作者:行者123 更新时间:2023-12-01 23:48:56 25 4
gpt4 key购买 nike

我有一个问题。我需要超时才能从 Firebase 实时数据库获取数据。

我有一个启动 Activity ,在其中我从数据库获取数据。我想这样做,以便仅在数据到达时才打开下一个 Activity 。

现在,我将在 X 秒后打开下一个 Activity ,而不是真正检查数据是否已到达。

现在,我将在 X 秒后打开下一个 Activity ,而不是真正检查数据是否已到达。

包含 View 的 Splash Activity。

public class SplashActivity extends AppCompatActivity implements SplashModel {

private SplashPresenter presenter;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
presenter = new SplashPresenter(this);
presenter.loadUserDetailsData();
}

@Override
public void showLoader() {
getSupportFragmentManager().beginTransaction().add(R.id.splash_container, new SplashFragment())
.commit();
}

@Override
public void openMainActivity() {
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
},
2000);
}
}

从服务器加载数据的 Splash 演示器。

public class SplashPresenter {

private FirebaseAuth mAuth = FirebaseAuth.getInstance();
private FirebaseDatabase db = FirebaseDatabase.getInstance();
private DatabaseReference users = db.getReference("Users").child(mAuth.getCurrentUser().getUid()).child("UserDetails");
private SplashModel model;

public SplashPresenter(SplashModel model) {
this.model = model;
}

public void loadUserDetailsData() {
model.showLoader();
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserSingleton retrievedData = dataSnapshot.getValue(UserSingleton.class);
UserSingleton.getInstance().setmUserName(retrievedData.getmUserName());
UserSingleton.getInstance().setmEmail(retrievedData.getmEmail());
UserSingleton.getInstance().setmEventDate(retrievedData.getmEventDate());
UserSingleton.getInstance().setmEventLocation(retrievedData.getmEventLocation());
UserSingleton.getInstance().setmPartnerName(retrievedData.getmPartnerName());
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
users.addListenerForSingleValueEvent(eventListener);
model.openMainActivity();
}
}

public interface SplashModel {
void showLoader();
void openMainActivity();

}

我需要只有在收到数据后才能打开下一个 Activity 。

我该怎么做?

最佳答案

从 onDataChange 打开 MainActivity,因此一旦加载数据,则只会调用 openMainActivity()。

public void loadUserDetailsData() {
model.showLoader();
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserSingleton retrievedData = dataSnapshot.getValue(UserSingleton.class);
UserSingleton.getInstance().setmUserName(retrievedData.getmUserName());
UserSingleton.getInstance().setmEmail(retrievedData.getmEmail());
UserSingleton.getInstance().setmEventDate(retrievedData.getmEventDate());
UserSingleton.getInstance().setmEventLocation(retrievedData.getmEventLocation());
UserSingleton.getInstance().setmPartnerName(retrievedData.getmPartnerName());
model.openMainActivity();
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
users.addListenerForSingleValueEvent(eventListener);

}

并在openMainActivity()中打开MainActivity,像这样没有延迟

  @Override
public void openMainActivity() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}

关于java - 如何设置从数据库获取数据的超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226627/

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