2017-11-22 4 views
0

나는 Firebase에서 android 응용 프로그램을 사용하여 초보자입니다. ListView 개의 장소를 표시하는 데 성공했으며, 이제는 항목을 클릭 할 때 장소를 삭제하려고합니다. Firebase 데이터베이스에서 선택한 항목을 삭제하는 방법은 무엇입니까?

내 시도 :

listPlace.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, final View view,final int position, long id) { 

    final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(EndroitActivity.this); 
     dialogBuilder.setTitle("Delete!"); 
     dialogBuilder.setPositiveButton("Yes...", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       Place p = list.get(position); 
       System.out.println(p.getNomPlace()); 

       DatabaseReference dR = FirebaseDatabase.getInstance().getReference("place").child(p.getNomPlace()); 
       dR.removeValue(); 
      } 
     }).setNegativeButton("No", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Toast.makeText(getApplicationContext(), "Fine, ya coward." 
           , Toast.LENGTH_SHORT).show(); 
        } 
       }); 

     dialogBuilder.create().show(); 

     return true; 
    } 
}); 

Database structure

+0

당신은 데이터베이스 구조를 공유 할 수 있습니까? –

+0

내 질문이 업데이트되었습니다 –

+0

'nomPlace' 필드 만 제거 하시겠습니까? –

답변

0
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); 
Query applesQuery = ref.child("place").orderByChild("nomPlace").equalTo(p.getNomPlace()); 
applesQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) { 
     appleSnapshot.getRef().removeValue(); 
    } 
} 

@Override 
public void onCancelled(DatabaseError databaseError) { 
    Log.e(TAG, "onCancelled", databaseError.toException()); 
} 
}); 
1

당신이 아래와 같이해야 할 전체 노드를 삭제하려면 ... 당신이이

DatabaseReference dR = FirebaseDatabase.getInstance().getReference("place").child("autoKey"); 
       dR.removeValue(); 
dR. removeValue(); 

p.getNomPlace()autoKey으로 대체하십시오. 특정 노드 autoKey에서 전체 노드를 제거합니다. getUid()은 autokey를 제공 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그래서'.child ("autoKey")'를'.child (getUid()) '로 대체해야합니다. –

0

Firebase 데이터베이스에서 레코드를 제거하려면 참조에 직접 removeValue() 메소드를 사용해야합니다. 청취자로 전혀 사용할 필요가 없습니다. placeId 제거하려는 특정 장소의 ID입니다

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
rootRef.child("place").child(placeId).removeValue(); 

하는 : 그래서 특정 장소를 제거하려면 다음 코드를 사용하십시오. 참고 : placeIdgetUid() 또는 사용자 ID와 다릅니다. 해당 ID를 얻으려면, 당신은 고유 키는 다음과 같이 push() 방법을 사용하는 것이 생성하는 순간에 getKey() 방법을 사용해야합니다

String placeId = rootRef.child("place").push().getKey(); 

placeId 데, 당신은 어떤 DatabaseReference에서 사용할 수 있습니다.

관련 문제