Firebaseデータベースから取得した値をArraylistに追加し、そこからString配列に追加しようとしています。私の検索方法はうまくいきます。私はトーストですべての値をプリントアウトすることができます。しかし、明らかにそれはarraylistに追加されません。Firebase/Android:Firebaseから取得した値をarraylistに追加するとnullポインタ例外が返される
フラグメントクラスのonActivityCreated()で取得するコードは次のとおりです。
ArrayList<String> allBrands = new ArrayList<>();
brandRef=FirebaseDatabase.getInstance().getReferenceFromUrl("https://stockmanager-142503.firebaseio.com/Brands");
q=brandRef.orderByChild("brandName");
q.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
allBrands.add((dataSnapshot.getValue(Brand.class)).getBrandName());
Toast.makeText(getActivity(),(dataSnapshot.getValue(Brand.class)).getBrandName(), Toast.LENGTH_SHORT).show();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
は、そして、これは私がOnActivityResultでのArrayList(フラグメントクラスの)メソッドを使用しようとしているが、イテレータのループは、私は信じて実行されていないところです。トーストは見られません。配列を操作しようとするとnullポインタ例外が発生します。値がブランド配列にコピーされないと仮定します。
count=allBrands.size();
String[] brands=new String[count];
Iterator<String> itemIterator = allBrands.iterator();
if(itemIterator.hasNext()){
//brands[i] = itemIterator.next();
Toast.makeText(getActivity(), itemIterator.next(), Toast.LENGTH_SHORT).show();
// i++;
}
for(i=0;i<count;i++){
if(brands[i].compareTo(Brand)==0){
f=1;break;
}
}
ここに私のデータベースが役立ちます。しかし、私は問題のないトーストですべての検索値を印刷することができます。私はあなたがすべてのデータを非同期Firebaseからロードされているという事実に刺される疑いで
ありがとうございます。取得したデータをonActivityResultメソッドに渡すことは可能でしょうか?そうすれば、アプリは検索が完了するまで待つでしょうか? –
'OnActivityResult()'は 'ChildEventListener'のメソッドの中から呼び出すことができます。これらのメソッドはメインスレッドで呼び出されます。 –