0

즉시 목표 : 나는 안드로이드에중포 기지에서 검색 - 경계의 색인 아웃

장기 목표를 정보를 기록하려면를 표시 할 수 있도록 중포 기지에서 데이터를 검색 : 중포 기지에서 데이터를 검색 그래서 나는 그것을 표시 할 수 있습니다 텍스트 뷰 또는 오더 뷰


연구 : 유튜브, 구글, 유래, 그리고 (특히 https://firebase.google.com/docs/database/android/read-and-write) 중포 기지 문서

내가 뭘 시도했는지 : 나는 오류 잡기를 시도했거나 오류가없는 경우 로그를 보냈지 만 실제로 오류를 수정하지는 않는다.


오류 :

Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
                       at java.util.ArrayList.get(ArrayList.java:411) 
                       at com.netgalaxystudios.timeclock.RegisterSubscriptionActivity.onCreate(RegisterSubscriptionActivity.java:80) 

에러이 라인에서 발생된다 ENUM subscriptionInfo.get = (0)로 .toString();

나는 내가 DataSnapshot가 있습니다 .. .getValue 방법


중포 기지 DB specificall 이해 확실하지 않다 : Firebase Database

RegisterSubscriptionActivity.java :

public class RegisterSubscriptionActivity extends Activity { 

    private DatabaseReference mDatabase; 

    ArrayList subscriptionInfo; 

    //Subscription (String) values 
    String micro, small, medium, large, enterprise; 
    String mNum, sNum, medNum, lNum, eNum; 
    String mPrice, sPrice, medPrice, lPrice, ePrice; 


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

     subscriptionInfo = new ArrayList<>(); 

     //GET INSTANCE OF FIREBASE DB & GRAB SUBSCRIPTION DATA 
     mDatabase = FirebaseDatabase.getInstance().getReference(); 
     mDatabase.child("Subscription").addValueEventListener(new ValueEventListener() { //get everything UNDER subscription 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { //literally a "snapshot" of the data 

       for(DataSnapshot subscriptionDataSnapshot : dataSnapshot.getChildren()) { 
        String subscriptions = subscriptionDataSnapshot.getValue(String.class); 
        subscriptionInfo.add(subscriptions); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 


     //MICRO 
     //mNum = subscriptionInfo.get(6).toString(); 
     // mPrice = subscriptionInfo.get(7).toString(); 
     // micro = subscriptionInfo.get(11).toString(); 
     //ENTERPRISE 
     eNum = subscriptionInfo.get(0).toString(); 
     Log.i("enterprise number", eNum); 

제가 빠진 부분이나 내가 더 볼 필요가있는 부분을 이해하도록 도와주십시오. 고마워요!

답변

0

Firebase is asynchronous에서 데이터를 읽는 중입니다. (가능성이) 결과가 subscriptionInfo에 저장되지 않음을 의미

첫 번째 요소에 액세스하려고 아직 때

eNum = subscriptionInfo.get(0).toString(); 

하지 않는 ArrayList에의 인덱스를 액세스하려는 시도 귀하가 직면하고있는 IndexOutOfBoundsException에 결과가 존재합니다.


당신은 이벤트 핸들러에 로깅 단계를 이동할 수 :

public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot subscriptionDataSnapshot : dataSnapshot.getChildren()) { 
     String subscriptions = subscriptionDataSnapshot.getValue(String.class); 
      subscriptionInfo.add(subscriptions); 
     } 
    } 

    eNum = subscriptionInfo.get(0).toString(); 
    Log.i("enterprise number", eNum); 
} 
+0

안녕 티모는, 귀하의 의견 주셔서 감사합니다, 나는 당신이 그것을 비동기되고 따라서 왜 당신에 대해 무슨 말을하는지 이해 생각 코드를 수정했습니다. 나는 이것을 사용해 보았고 "unknown class eNum"을 얻었고 "symbol get을 해결할 수 없다"(eNum = subscriptionInfo.get (0) .toString();) –

+0

그래서 코드의 일부를 for 루프를 사용하여 오류를 없애지 만 화면에 아무런 로그도 인쇄되지 않습니다. 따라서 onDataChange에 점점 더 많은 것이 있는지 궁금합니다. –