gpt4 book ai didi

android - 在没有互联网的设备上通过 Firebase 隐藏 ProgressDialog

转载 作者:行者123 更新时间:2023-11-30 00:52:35 25 4
gpt4 key购买 nike

我有这个场景:

  • 显示进度对话框。
  • 调用 Firebase。
  • 获取数据后隐藏进度对话框

完美运行,但是当设备没有互联网连接时问题就来了,在这种情况下进度对话框总是显示,当设备没有互联网时我想做的是关闭进度并显示一条错误消息。

这是我的代码:

showProgessDialog();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("hello");
DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");

connectedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
boolean connected = snapshot.getValue(Boolean.class);
if (connected) {
Log.d(Constans.LOG,"1.- datachange connected");
hideProgressDialog();
} else {
Log.d(Constans.LOG,"2.- datachange disconnected");
showProgessDialog();
}
}

@Override
public void onCancelled(DatabaseError error) {
System.err.println("3.- datachange cancelled");
}
});

myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(Constans.LOG,"4.- myRef addListenerForSingleValueEvent onDataChange");
}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(Constans.LOG,"5.- myRef addListenerForSingleValueEvent cancell");
}
});


myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(Constans.LOG,"6.- myRef addValueEventListener onDataChange");
String value = dataSnapshot.getValue(String.class);
mAboutMe.setText(value);
}
@Override
public void onCancelled(DatabaseError error) {
Log.d(Constans.LOG,"7.- myRef addValueEventListener error"+error.getDetails());

}
});

如您所见,所有调用的方法在日志行中都有一个编号,当设备有互联网时,方法调用顺序为:

2,1,6,4

没有网络的时候就调用

2

我无法在打开它的地方关闭进度。

知道我可以使用 Firebase 框架做什么吗?

最佳答案

您可以使用此类的 isConnected 方法检查设备的互联网连接。然后在没有互联网连接时关闭进度对话框

public class InternetConnectionDetector
{
private Context context;

public InternetConnectionDetector(Context context)
{
this.context = context;
}

public boolean isConnected()
{
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

//There are changes after apk lollipop while detecting internet connection:
//if user's os newer then lollipop:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
Network[] networks = connectivityManager.getAllNetworks();
NetworkInfo networkInfo;

for(Network mNetwork : networks)
{
networkInfo = connectivityManager.getNetworkInfo(mNetwork);

if(networkInfo.getState().equals(NetworkInfo.State.CONNECTED))
{
return true;
}
}
}

//if user's os older then lollipop:
else
{
//getAllNetworkInfo method work for only before API 19:
NetworkInfo[] info = connectivityManager.getAllNetworkInfo();

if(info != null)
{
for(NetworkInfo anInfo : info)
{
if(anInfo.getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
}
}

return false;
}
}

关于android - 在没有互联网的设备上通过 Firebase 隐藏 ProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40740206/

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