2016-12-08 5 views
1

firebase 데이터베이스를 사용하여 로그인하려고하는데, 이미 데이터가 저장되어 있습니다.안드로이드 스튜디오로 Firebase 데이터베이스 쿼리하기

This is my Database tree!

그래서 내가 입력으로 입력 한 자격 증명을 일치하는 특정 노드를 검색하는 쿼리의 어떤 종류를 게시 및 확인에 대한 참조 키를 볼 필요가있다. 여기에 내 코드가 있습니다.이 코드는 항상 예외적 인 경우에만 사용하고 오류 토스트를 제공하기 때문에 성공하지 못합니다. 나는 내 문제에 대한 해결책을 얻는 것이 더 이상 필요합니다.

public class LogInActivity extends AppCompatActivity { 

    DatabaseReference Rootref = FirebaseDatabase.getInstance().getReference(); 
    DatabaseReference mwritefarmref = Rootref.child("WRITE FARM"); 
    DatabaseReference muserprofilestab = mwritefarmref.child("USER PROFILES"); 

    EditText mobinputtext; 
    EditText passwordinputtext; 
    TextView tv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_log_in); 

     mobinputtext = (EditText) findViewById(R.id.mobinputtext); 
     passwordinputtext = (EditText) findViewById(R.id.passinputtext); 
     tv = (TextView) findViewById(R.id.textView); 

     Button submitbutton = (Button) findViewById(R.id.submitbutton); 
     submitbutton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       try { 
        DatabaseReference muserid = (DatabaseReference) muserprofilestab.orderByChild("Mobile number").equalTo(mobinputtext.getText().toString()); 
        tv.setText(muserid.getKey()); 
       }catch (Exception e){ 
        Toast.makeText(LogInActivity.this, "ERROR!!", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

    } 
} 
+0

먼저 데이터베이스 구조를 변경하는 것으로 시작합니다. 또한 '열쇠'에 공백이 있으면 사용하지 마십시오. camelCaseLetters를 사용하십시오. –

+0

오! 어드 바이스에 감사드립니다! : D –

+0

하지만 지금은이 데이터베이스에 필요한 작업을 수행하는 방법이 있습니까?! –

답변

0

Query를 DatabaseReference로 캐스팅 할 수 없습니다. 대신에 :

DatabaseReference muserid = (DatabaseReference) muserprofilestab.orderByChild("Mobile number").equalTo(mobinputtext.getText().toString()); 

이 작업을 수행 :

Query myquery = muserprofilestab.orderByChild("Mobile number").equalTo(mobinputtext.getText().toString()); 
+0

응답 해 주셔서 감사합니다. :) 하지만 이미 시도했습니다 ...... 일단 내가 그런 쿼리를 추가 한 다음 얻은 쿼리의 KEY를 출력하면 "USER PROFILES"가 반환되는 반면 원하는 것은 "3120100004"입니다 술? –

0

중포 기지는 관계형 데이터베이스가 아닙니다. 그것은 NOSDB db입니다. 상황은 조금 다릅니다. 속도는 그들이 말한대로 공간이 아닌 궁극적 인 목표입니다!
모바일 입력을 기반으로 상위 키를 검색하려면 루트 아래에 'MobileNoDetails'노드를 새로 만듭니다. 'MobileNoDetails'노드 아래에 사용자 모바일 번호를 키로 저장하고 그 아래에 사용자 상위 키 "31201000004"를 저장합니다. 그렇게하면 휴대 전화 번호를 입력 할 때 사용자 부모 키를 검색 할 수 있습니다.

+0

글쎄, 정말 고마워! 나는 너의 요점을 분명히 알았다. 나는 그 과정을 통해 확실히 빠져 나갈 수 있습니다. :) 그러나 그때 당신이 그것을 알고 상대적으로 매우 복잡한 방법으로 밝혀지고 있습니다. 따라서 궁극적으로는 그것을 시도하는 방식대로 처리하는 것이 불가능합니까? –

관련 문제