2017-03-26 11 views
0

Firebaseのデータを取得したコードがありましたが、機能しましたが何とか機能しなくなりました。 ValueEventListenerのすべては、「No such such instance field: 'mDatabase'」というエラーのためにスキップされます。これをどうすれば解決できますか?私は、Android Studioと私のPCを再起動して試してみましたが、それは...私にFirebase 'そのようなインスタンスフィールドがありません'エラー

コードこのエラーを与え続け:

mDatabase = FirebaseDatabase.getInstance().getReference(); 

ValueEventListener dataListener = new ValueEventListener() { 

    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 

      // Make list for ReisData objects 
      reisDataList = new ArrayList<ReisData>(); 

      // Put objects from database into java object list 
      for (DataSnapshot ds : dataSnapshot.child("allData").getChildren()) { 
       data = ds.getValue(ReisData.class); 
       reisDataList.add(data); 
      } 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting data failed, log a message 
     Log.w("Error:", databaseError.toException()); 
    } 
}; 
mDatabase.addValueEventListener(dataListener); 

はEDIT:私は問題を発見したかもしれないと思うが。このコードではreisDataListの内容を表示するコードを追加しましたが、これはValueEventListenerを妨害するようです。このコードをエラーなしで実行できる方法はありますか?

追加コードは:

MyTripsAdapter myTripsAdapter = new MyTripsAdapter(getContext(), reisDataList); 
    ListView listView = (ListView) view.findViewById(R.id.mijnReizenList); 
    listView.setAdapter(myTripsAdapter);*/ 
+0

だからあなたのコードがコンパイルされていませんか?拡張しますか – Rahul

+0

コードは実行されますが、ValueEventListenerの内容はスキップされます。 – Blank

+0

確認のために1つのことを行い、onDataChange内でデバッグモードでブレークポイントを設定し、firebaseのWebサイトから直接データベースを変更します。 – Rahul

答えて

0

このコードは、問題を解決するのを助けることができます。

パブリッククラスMap_ActivityはAppCompatActivity {

private DatabaseReference databaseRefer; 
private FirebaseDatabase mFirebaseInstance; 
private ArrayList<Location> reisDataList = new ArrayList<>(); 
private MyTripsAdapter myTripsAdapter; 

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

    mFirebaseInstance = FirebaseDatabase.getInstance(); //getting instance of FireDatabase 

    //getting db reference from specific node, here you're not refering the node 
    databaseRefer = mFirebaseInstance.getReference("windfirm/future"); 

    ListView listView = (ListView) view.findViewById(R.id.mijnReizenList); 

    databaseRefer.addListenerForSingleValueEvent(new ValueEventListener() { 

     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

     // pendingCount is the count for dataSnapshot children 
     long[] pendingCount = { dataSnapshot.getChildrenCount() }; 

     //parsing all the node list data from dataSnapshot 
     for (DataSnapshot child : dataSnapshot.getChildren()) { 


       String rightLocation = child.child("lat").getValue().toString(); 
       String leftLocation = child.child("lon").getValue().toString(); 
       String city = child.child("city").getValue().toString(); 
       reisDataList.add(new Location(rightLocation, leftLocation, city)); //adding object to arraylist 

      // we loaded a child, check if we're done 
       pendingCount[0] = pendingCount[0] - 1; 
       if (pendingCount[0] == 0) { 
        myTripsAdapter = new MyTripsAdapter(getContext(), reisDataList); 
        listView.setAdapter(myTripsAdapter); 
       }    


      } 


     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 


    } 

}

+0

私はあなたのコードを使用しようとしましたが、アダプターはなんらかの方法で通知を受けません。アダプタが設定されているため、nullポインタ例外が発生します.VerEventListenerのデータはまだ返されていません。 ValueEventListenerからデータが返されるまで、アダプタに待つように指示する方法はありますか? – Blank

+0

コードを編集して確認します。それがうまくいくことを望みます。 –

関連する問題