[英]Android App/Activity To Start Fresh Completely every time it starts or resumes?
[英]Android app crashes every time i start the previous activity
我有2個活動,例如活動Alpha和活動Beta。
在我的AlphaActivity.class
我有以下代碼:
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
cDatabase.addValueEventListener(new ValueEventListener() {
public static final String TAG = "XD";
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
String u = snapshot.child("username").getValue().toString(),
p = snapshot.child("phone").getValue().toString(),
ad = snapshot.child("address").getValue().toString(),
f = snapshot.child("floor").getValue().toString(),
ns = snapshot.child("notes").getValue().toString();
Address a = new Address(u, p, ad, f, ns);
infoArray.add(a.address);
nameArray.add(a.name);
phoneArray.add(a.phone);
writeListView();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(ProfileActivity.this, "Action canceled!", Toast.LENGTH_SHORT).show();
}
});
}
...
每當我運行該活動時,它就會像魅力一樣。 我在此按鈕中有一個按鈕,在該按鈕中,我將啟動Beta活動onClick
如下所示:
public void betaMethod(View view) {
finish();
Intent intent = new Intent(this, BetaActivity.class);
startActivity(intent);
}
在BetaActivity.class
我做了一些事情,然后又有一個按鈕,其中onClick
行為如下:
public void addToDatabase() {
...
finish();
Intent intent = new Intent(this, AlphaActivity.class);
startActivity(intent);
}
當該代碼執行時,我的應用程序崩潰,並且我得到的錯誤是在那AlphaActivity.class
上,其中我有p = snapshot.child("phone").getValue().toString()
。 我敢打賭它與onDataChange
方法onDataChange
但我不知道。 有什么建議嗎?
我得到的錯誤是:
06-04 16:59:16.885 13978-13978/com.example.johng.assosfood E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.johng.assosfood, PID: 13978
java.lang.NullPointerException
at com.example.johng.assosfood.ProfileActivity$1.onDataChange(ProfileActivity.java:48)
at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source)
at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source)
at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
at dalvik.system.NativeStart.main(Native Method)
其中ProfileActivity.java = AlphaActivity.java
當您開始新的活動時,您的代碼是
public void betaMethod(View view) {
finish(); //here
Intent intent = new Intent(this, BetaActivity.class);
startActivity(intent);
}
為什么要在啟動intent
時完成活動,這意味着您回來后找不到您的上一個activity
,在這種情況下,它無法加載您的上一個活動,因為它在啟動intent
之前已完成。 如果您想從活動中刪除后backstack
,請使用
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
因此,請從此處刪除完成並檢查代碼是否正常。
請讓我知道這對你有沒有用。
我沒有看到任何類似cDatabase = FireabseDatabase.getInstance().getReference();
子電話必須包含數字值,並且您將其作為字符串檢索
而不是p = snapshot.child("phone").getValue().toString()
。
始終使用p = snapshot.child("phone").getValue(String.class);
要么
p = String.valueOf(snapshot.child("phone").getValue(String.class));
對所有快照執行此操作。
同樣在public void betaMethod(View view)
使用finish(); 在startActivity()
這只是一個好習慣
實際上,調用finish()
並沒有錯! 實際上,如果您在不調用finish()
的OOM exception
下來回移動了太多次,則可能會導致OOM exception
因為堆棧中充滿了每個活動的實例。 我認為您只需要在startActivity()
而不是之前調用finish()
方法即可。
當您在Firebase數據庫中存儲長數字時,它可能以Float數據類型存儲它。 因此,也許為了獲得“電話”的價值,您應該嘗試
String.valueOf((Float)snapshot.child("phone").getValue());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.