关于使用android studio在firebase实时数据库中的uid下创建随机密钥

Posted

技术标签:

【中文标题】关于使用android studio在firebase实时数据库中的uid下创建随机密钥【英文标题】:About creating a random key under Uid in firebase realtime database using android studio 【发布时间】:2021-09-30 12:49:57 【问题描述】:

我正在使用 android studio 和 firebase 实时数据库创建一个简单的应用程序。当用户注册他的数据时,它将保存在 firebase 提供的 Uid 下。 然后我在 Uid 中创建了另一个名为“PATH”的节点,我想在其中存储用户提供的一些数据。为此,我想创建特定的 id 或其他东西,以便每次用户输入新数据时都不会替换它。 (查看截图)

我曾尝试使用 Datasnapshot 来执行此操作,但它不响应点击。这是我尝试过的。

add_new.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 

                if( !Validate_text() )
                    return;
                
                else
                    //Toast.makeText(getApplicationContext(), picker.getDayOfMonth() + "-" + picker.getMonth() + "-" + picker.getYear(), Toast.LENGTH_SHORT).show();
                // redirect to path

                    String ach = milestone.getEditText().getText().toString().trim();
                    int day = picker.getDayOfMonth();
                    int month = picker.getMonth();
                    int year = picker.getYear();
                    String date = day + "/" + month + "/" + year ;

                    reference.child(uid).child("PATH").addValueEventListener(new ValueEventListener() 
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) 
                            for( DataSnapshot random_key : snapshot.getChildren()) 

                                String key = random_key.getKey();
                                Map<String, Object> updates = new HashMap<String, Object>();
                                updates.put("Achievement : ", ach);
                                updates.put("Date", date);
                                reference.child(uid).child("PATH").child(key).updateChildren(updates).addOnSuccessListener(new OnSuccessListener<Void>() 
                                    @Override
                                    public void onSuccess(Void unused) 
                                        Toast.makeText(getApplicationContext(), "Your achievement has been updated.", Toast.LENGTH_LONG).show();
                                        finish();
                                        startActivity(new Intent(AddPath.this, Path.class));
                                    
                                );
                            
                        

                        @Override
                        public void onCancelled(@NonNull DatabaseError error) 
                            Log.v(TAG, error.getMessage());
                        
                    );
                

            
        );

如果有人知道我在这里做错了什么或可以提供帮助,非常欢迎。

【问题讨论】:

【参考方案1】:

我希望你像这样构建你的数据库 json。

-users
   -userUid
      -name: "Ticherhaz"
      -others: "Master"
   -userUid2
      -name: "Pyke"
      -others: "Bronze"
-path
   -userUid
      -pathUid
         -achievement: "Eat without using hand"
         -date: "12/02/2022"
      -pathUid2
         -achievement: "Wake up early"
         -date: "12/02/2022"
   -userUid2
      -pathUid3
         -achievement: "Feeding team"
         -date: "13/02/2022"

既然您说要创建随机 Uid,您可以使用 Firebase pushId。你可以参考这里,Firebase Push ID。

    add_new.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            if( !Validate_text() )
                return;
            
            else
                String ach = milestone.getEditText().getText().toString().trim();
                int day = picker.getDayOfMonth();
                int month = picker.getMonth();
                int year = picker.getYear();
                String date = day + "/" + month + "/" + year ;

                Map<String, Object> updates = new HashMap<String, Object>();
                updates.put("Achievement : ", ach);
                updates.put("Date", date);

                final String pushId = FirebaseDatabase.getInstance().getReference().push().getKey(); //Create new random Id
                FirebaseDatabase.getInstance().getReference().child("path").child(uid).child(pushId).setValue(updates).addOnCompleteListener(new OnCompleteListener<Void>() 
                    @Override
                    public void onComplete(@NonNull Task<Void> task) 
                        Toast.makeText(getApplicationContext(), "Your achievement has been updated.", Toast.LENGTH_LONG).show();
                        finish();
                        startActivity(new Intent(AddPath.this, Path.class));
                    
                );
            
        
    );

【讨论】:

非常感谢@TicherhazFreePalastine。你的解决方案奏效了。正如你提到的,我也重新安排了结构。再次感谢你..

以上是关于关于使用android studio在firebase实时数据库中的uid下创建随机密钥的主要内容,如果未能解决你的问题,请参考以下文章

关于在Firebase auth Uid下检索嵌套数据并使用android studio推送uid

Android studio关于界面跳转问题

关于Android Studio中的Log

关于android studio so文件 冲突 怎么解决

关于使用android studio在firebase实时数据库中的uid下创建随机密钥

关于Android老项目在Android Studio 4.0运行的报错