2016-08-18 8 views
0

official documentationに続いて、Firebaseに新しいオブジェクト(私のOrderクラスのインスタンス)を保存して、私に新しいキーを作成したいと思います。これは私がやっていることです:AndroidでFirebaseで新しいオブジェクトを作成する

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference orders = database.getReference("orders"); 
orders.push().setValue(order); 

しかし、何もコンソールから表示されません。あらかじめordersキーを作成する必要がありますか?空のキーが有効でないと思われるので、コンソールから手動で作成することはできません。次のように

Orderクラスは次のとおりです。

public class Order { 

    private final ArrayList<OrderItem> orderItems = new ArrayList<>(); 

    public ArrayList<OrderItem> getOrderItems() { 
     return orderItems; 
    } 

    public void addOrderItem(OrderItem orderItem) { 
     orderItems.add(orderItem); 
    } 

} 

編集コメントに基づいて

、私は私が手にエラーがチェック:

Permission denied 

をしかし、私のアクセスルールは以下のとおりです。

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 

したがって、規則はusersキーにのみ適用され、ordersには適用されません。他のキーについては、デフォルトルールが適用されます。

デフォルトルールでは認証が必要です。彼らはあなたのアプリの認証されたユーザーに完全な読み書きアクセスを許可します。

私のユーザーは認証されていますが、私の場合はこれがなぜ機能しないのですか?ユーザーが正しく認証されるようにするにはどうすればよいですか?いずれの場合においても

へのアクセスルールを変更:

{ 
    "rules": { 
    "orders": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
    }, 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 

して問題を解決していません。

+2

あなたの[セキュリティリスクes](https://firebase.google.com/docs/database/security/)にアクセスを許可するように設定されていますか?デフォルトのルールでは、認証されたユーザーのみがアクセスできます。 –

+1

これが問題であるかどうかを検出するには、完了リスナーを 'setValue()'呼び出しに追加してください。 [Androidに値を書き込むときのエラーを検出する](http://stackoverflow.com/documentation/firebase/5548/how-do-i-listen-for-errors-when-accessing-the-database#t=201608190142309558745)を参照してください。たとえば、 –

+0

@ qbix私はデフォルトのセキュリティルールを使用していますが、ユーザーは認証されています。 – manfcas

答えて

1

FirebaseはArraylistsのシリアル化をサポートしていません。リストまたはマップを代わりに使用する必要があります。
サポートデータ型は次のとおりです。

  • 文字列
  • ロング
  • ダブル
  • ブール
  • 地図<文字列、オブジェクト>
  • 一覧<オブジェクト>

あなたは、特定のアクセスに適用されるデフォルトのルールを使用して、データベースのデフォルトのルールが混乱している:

注:アクセスはデフォルトで許可されていません。 .writeルールまたは.readルールがパスまたはその上に指定されていない場合、アクセスは拒否されます。
オフィシャルFirebaseドキュメント


ユーザーはあなたがドキュメントから、このコードスニペットを使用することができますに署名されているかどうかを確認するには、次の

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    // User is signed in 
} else { 
    // No user is signed in 
} 

それとも、通知を取得するリスナーを使用することができますAuthStateの変更について:

mAuthListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user != null) { 
      // User is signed in 
      Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
     } else { 
      // User is signed out 
      Log.d(TAG, "onAuthStateChanged:signed_out"); 
     } 
     // ... 
    } 
}; 
関連する問題