2017-06-07 7 views
0

既存のノードでfirebaseデータベースを更新するときに奇妙な問題が発生しました。 それはInvocationTargetExceptionで戻って来て、さらにスタックオーバーフローエラーの下にあります(サイトがその名前を取得した場所です)。 Iveは私が考えることができたすべてを試したので、それを検索してまだそれを修正することはできません。問題は、ビルドファイル内にあるようです。私は最近、自分のアプリパッケージ名を変更してfirebaseコンソールに追加しました。 また、ログデバッグセクションがまだ私のアプリの以前のパッケージ名com.example.shopperを参照していることに気付きました。これが原因かもしれません。 それは2本の線が下に指摘されていますか?updatechildren()のstackoverflowエラーfirebase android

else { 
     InventoryItem updatedItem = items.get(position).getInventoryItem(); 
     updatedItem.setPrice(price); 
     updatedItem.setQuantity(quantity); 
     updatedItem.setUnitName(unitType); 
     Map<String, Object> databaseUpdate = new HashMap<>(); 
     databaseUpdate.put(updatedItem.getName(), updatedItem); 
     Log.d(TAG, "done: updatedItem: "+updatedItem.toString()); 
     inventoryDatabaseReference=inventoryDatabaseReference.child(updatedItem.getCategory()); 
     Log.d(TAG, "done: updateNotWorking: "+inventoryDatabaseReference.toString()); 
     inventoryDatabaseReference.updateChildren(databaseUpdate).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception e) { 
       Log.d(TAG, "onFailure: "+e.toString()); 
      } 
     }); 
    } 

これは、トレースが私を指し示す障害リスナーの行です。リスナーを追加して何がうまくいかなかったのかを知るために、リスナーを追加しましたが、その行が呼び出されるとすぐに見つかりました。上記のログのようにエラーが発生しました。このフラグメントは、そのデータの初期配置などの複数の同様の目的に使用され、その目的で動作します。それは、これは簡単なエラーと時間の無駄ですが、アイブ氏は、この上のすべての最後の夜を過ごしたし、解決策を見ることができない場合donelistener.done

builder.setTitle(title).setPositiveButton("Done", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if (setPrice || isUpdating) 
       doneListener.done(quantity, unitSelected, position, priceSet); 
      else { 
       priceInBasket = priceSet * quantityToBuy; 
       Log.d("n", "onClick: TotalPrice toBasket " + priceInBasket + "individiual price" + priceSet); 
       doneListener.done(quantityToBuy, buyerItemUnitName, position, priceInBasket); 
      } 
     } 
    }) 

申し訳ありませんを呼び出す最初の行を指すの下 トレース。それはその後、私のコードは、上記のある行が

06-07 14:13:21.877 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source) 
06-07 14:13:21.877 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi.zzax(Unknown Source) 
06-07 14:13:21.877 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi.zzax(Unknown Source) 
06-07 14:13:21.877 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi.zzaF(Unknown Source) 
06-07 14:13:21.877 14585-14585/com.example.testing.shopper W/System.err:  at com.google.firebase.database.DatabaseReference.zza(Unknown Source) 
06-07 14:13:21.877 14585-14585/com.example.testing.shopper W/System.err:  at com.google.firebase.database.DatabaseReference.updateChildren(Unknown Source) 
06-07 14:13:21.878 14585-14585/com.example.testing.shopper W/System.err:  at com.aihsoftware.shopper.CurrentInventoryFragment.done(CurrentInventoryFragment.java:288) 
06-07 14:13:21.878 14585-14585/com.example.testing.shopper W/System.err:  at com.aihsoftware.shopper.DialogFragments.AddItemToInventoryDialogFragment$2.onClick(AddItemToInventoryDialogFragment.java:145) 
06-07 14:13:21.878 14585-14585/com.example.testing.shopper W/System.err:  at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157) 
06-07 14:13:21.878 14585-14585/com.example.testing.shopper W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:110) 
06-07 14:13:21.878 14585-14585/com.example.testing.shopper W/System.err:  at android.os.Looper.loop(Looper.java:193) 
06-07 14:13:21.878 14585-14585/com.example.testing.shopper W/System.err:  rr:  at java.lang.reflect.Method.invoke(Method.java:515) 
06-07 14:13:21.894 14585-14585/com.example.testing.shopper W/System.err: ... 557 more 
06-07 14:13:21.895 14585-14585/com.example.testing.shopper W/System.err: Caused by: java.lang.StackOverflowError 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err:  at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:163) 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err:  at java.lang.StringBuilder.append(StringBuilder.java:311) 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err:  at android.net.Uri.encode(Uri.java:1864) 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err:  at android.net.Uri$PathPart.getEncoded(Uri.java:2112) 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err:  at android.net.Uri$HierarchicalUri.appendSspTo(Uri.java:1216) 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err:  at android.net.Uri$HierarchicalUri.makeSchemeSpecificPart(Uri.java:1205) 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err:  at android.net.Uri$HierarchicalUri.getSsp(Uri.java:1188) 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err:  at android.net.Uri$HierarchicalUri.getSchemeSpecificPart(Uri.java:1197) 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/System.err: ... 559 more 
06-07 14:13:21.906 14585-14585/com.example.testing.shopper W/dalvikvm: threadid=1: calling UncaughtExceptionHandler 
であることを示している

06-07 14:13:21.434 14585-14585/com.example.testing.shopper  D/CurrentInventory: done: updatedItem: InventoryItem{quantity=6, price=0.5, unitName='/100g'} 
06-07 14:13:21.435 14585-14585/com.example.testing.shopper D/CurrentInventory: done: updateNotWorking: https://shopper-a34fb.firebaseio.com/ShopInventory/-KkgxqStvYBMm1fz0lOZ/Energy%20Drinks 
06-07 14:13:21.764 14585-14585/com.example.testing.shopper I/dalvikvm: threadid=1: stack overflow on call to Ljava/lang/AbstractStringBuilder;.enlargeBuffer:VI 
06-07 14:13:21.764 14585-14585/com.example.testing.shopper I/dalvikvm: method requires 28+20+20=68 bytes, fp is 0x419a2334 (52 left) 
06-07 14:13:21.764 14585-14585/com.example.testing.shopper I/dalvikvm: expanding stack end (0x419a2300 to 0x419a2000) 
06-07 14:13:21.764 14585-14585/com.example.testing.shopper I/dalvikvm: Shrank stack (to 0x419a2300, curFrame is 0x419a248c) 
06-07 14:13:21.765 14585-14585/com.example.testing.shopper D/AndroidRuntime: Shutting down VM 
06-07 14:13:21.765 14585-14585/com.example.testing.shopper D/dalvikvm: threadid=1: detach (group=0x41aa3ce0) 
06-07 14:13:21.765 14585-14585/com.example.testing.shopper W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41aa3ce0) 
06-07 14:13:21.765 14585-14585/com.example.testing.shopper W/dalvikvm: threadid=1: uncaught exception occurred 
06-07 14:13:21.765 14585-14585/com.example.testing.shopper W/System.err: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
06-07 14:13:21.772 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source) 

これら

06-07 14:13:21.859 14585-14585/com.example.testing.shopper D/dalvikvm: GC_FOR_ALLOC freed 5052K (46469), 38% free 8607K/13700K, paused 34ms, total 35ms 
06-07 14:13:21.860 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source) 
06-07 14:13:21.860 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source) 
06-07 14:13:21.860 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi.zzax(Unknown Source) 
06-07 14:13:21.860 14585-14585/com.example.testing.shopper W/System.err:  at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source) 

の束以下のようにあなたはちょうど私が トレースを教えて必要があるかもしれない他の ものはあります

最後にこれを赤い束で

06-07 14:13:21.927 14585-14585/com.example.testing.shopper E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.testing.shopper, PID: 14585 
                     java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source) 
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source) 
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source) 
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source) 
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source) 

ありがとうございます皆さん

EDIT:もう少し掘り出しを行い、呼び出し対象はstackoverflowエラーのラッパーです。それを指摘するのを忘れてしまった。 これは、URIとstringbuilderに問題があることを意味します。 .updateChildren()はURIので動作しません

+0

を働いたものですバリエーションとして、これらの両方にカテゴリを配置された複数subcategories.Iを引き起こして問題となっているですファイアベース。あなたは、String、Long、Double、Boolean、Map とList をFirebase値に入れることができます(firebase.google.com/docs/database/android/read-and-writeを参照)。 ヒント: auto-value-firebaseを使ってJava pojo:sをFirebaseの値に簡単に変換する – Peter

答えて

0

私は回避策を見つけました。私はまだそれは動作しますが、私はまだ、stackoverflowエラーが発生している理由はわかりません。 オブジェクト自体ではなくオブジェクトの個々のデータメンバーを指すようにupdateChildren()を変更しました。これはうまくいきましたが、最初に項目を複数回更新すると別のツリーにつながるエラーが発生しました。 例えばiは カテゴリ有する:{ 項目:{ 価格:1 量:1 } } それは カテゴリをもたらす:{ カテゴリ:{ 価格:2(更新) 量:2 { 価格:1 数量:1 }} これは、必要な数の更新を繰り返し続け、私は、問題がどこから来たことがあると信じて } 項目を(更新)。しかし、私は自分のコードのエラーが何であるか理解できません。私はベストプラクティスとして常にupdateChildren()を使用します。 私は考えることができるすべては、これらの行が

databaseUpdate.put(updatedItem.getName(), updatedItem); 
    inventoryDatabaseReference=inventoryDatabaseReference.child(updatedItem.getCategory()); 

これはあなたのInventoryItemは、おそらくへの許容値ではありません

databaseUpdate.put(updatedItem.getCategory()+"/"+updatedItem.getName()+"/price",price); 
     databaseUpdate.put(updatedItem.getCategory()+"/"+updatedItem.getName()+"/quantity",quantity); 
     databaseUpdate.put(updatedItem.getCategory()+"/"+updatedItem.getName()+"/unitName",unitType); 
inventoryDatabaseReference.updateChildren(databaseUpdate) 
+0

上記のコメントをチェック – Peter

関連する問題