我遇到了活动崩溃.当我从Firebase实时数据库获取数据时.我在下面提到了异常和我的主活动代码



' 致命异常:main 流程: com.intracity, PID: 9569 android.view.WindowManager$BadTokenException:无法添加窗口 -- 令牌android.os.BinderProxy@99f7d19无效;您的活动是否正在运行? t android.view.ViewRootImpl.setView(ViewRootImpl.java:808) 在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:351)输入代码 at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) at android.widget.Toast$TN.handleShow(Toast.java:465) at android.widget.Toast$TN$2.handleMessage(Toast.java:347) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:203) at android.app.ActivityThread.main(ActivityThread.java:6339) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945) '

活动代码: 这种方法我用来在提供 20 到 40 次更新后从节点获取实时 Firebase 位置,它崩溃了。谢谢!!

'

public void DataData() {
try {
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("1:673426911334:android:31ed7fa834e0c6f4") // Required for Analytics.
.setApiKey("AIzaSyD8o7uS21z1ZeN17cTdIjx6EQBV3lgJoQs") // Required for Auth.
.setDatabaseUrl("https://intracitydriver.firebaseio.com/") // Required for RTDB.
.build();
FirebaseApp.initializeApp(this, options, "sec");
FirebaseApp secondary = FirebaseApp.getInstance("sec");
FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(secondary);
secondaryDatabase.getReference("9728824163").addValueEventListener(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
for (com.google.firebase.database.DataSnapshot locationSnapshot : dataSnapshot.getChildren()) {`enter code here`
String location = locationSnapshot.getValue().toString();
String[] strings = location.split("=");
String aDouble = (strings[2]);
String aDouble2 = (strings[3]);
String[] newlat = aDouble.split(",");
String[] newlon = aDouble2.split("\}");
Double lat = Double.valueOf(newlat[0]);
Double lon = Double.valueOf(newlon[0]);
//               String s=strings[5];
Toast.makeText(Home.this, ""+lat+lon, Toast.LENGTH_SHORT).show();


Log.d("Locations updated", "location: " + location);
Log.e("Yogesh", lat + "hello" + lon);
final LatLng latLng = new LatLng(lat, lon);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// NEWTruckMarker(latLng);
}
}, 1000);

}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} catch (Exception e) {'
//  Toast.makeText(this, "" + e, Toast.LENGTH_SHORT).show();
e.printStackTrace();
Log.e("Crash Found: ",""+e);'
}
}

'

此异常的原因是,如异常消息所述,活动已完成,但您正在尝试访问已完成活动的Context。 因此,您需要在回调时检查Activiy's是否存在。请参阅下面的代码以供参考。

secondaryDatabase.getReference("9728824163").addValueEventListener(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange (com.google.firebase.database.DataSnapshot dataSnapshot){
if(!isFinishing()){
// Do your stuff here
}
}
}

注意- 当您的活动被销毁时,您还必须删除ValueEventListener。可能在onStop()onDestroy().

最新更新