簡體   English   中英

每次我開始上一個活動時Android應用程序崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM