2016-09-17 152 views
0

我试图从Firebase数据库检索数据到RecyclerView,但遇到此错误java.lang.NullPointerException:尝试调用虚拟方法。 'com.google.firebase.database.DatabaseReference com.google.firebase.database.DatabaseReference.child(java.lang.String)' on a null object referencejava.lang.NullPointerException:尝试调用虚拟方法'com.google.firebase.database

以下是我的主要活动课。

package oerrride.we.huzykamz.testingappfirebase; 

    import android.app.Dialog; 
    import android.content.Context; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.support.v7.widget.LinearLayoutManager; 
    import android.support.v7.widget.RecyclerView; 
    import android.view.View; 
    import android.widget.Button; 

    import com.google.android.gms.common.GoogleApiAvailability; 
    import com.google.android.gms.tasks.Task; 
    import com.google.firebase.database.ChildEventListener; 
    import com.google.firebase.database.DataSnapshot; 
    import com.google.firebase.database.DatabaseError; 
    import com.google.firebase.database.DatabaseReference; 
    import com.google.firebase.database.FirebaseDatabase; 
    import com.google.firebase.database.ValueEventListener; 

    import java.util.ArrayList; 
    import java.util.List; 


    public class MainActivity extends AppCompatActivity { 

     private Button but; 
     private DatabaseReference mRef; 
     private MyAdapter adapter; 
     public RecyclerView recyclerView; 

     public List<ModelClass> movies_; 
     public Context c; 
     private LinearLayoutManager linearLayoutManager; 

     private DatabaseReference mMovieRef =mRef.child("Name"); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      movies_ = new ArrayList<ModelClass>(); 

      recyclerView =(RecyclerView) findViewById(R.id.recyclerview); 

      linearLayoutManager = new LinearLayoutManager(this); 
      recyclerView.setLayoutManager(linearLayoutManager); 
      recyclerView.setHasFixedSize(true); 
      mRef = FirebaseDatabase.getInstance().getReferenceFromUrl("xxxxxxxxxxxxxxxxxxxxxx"); 


      mRef.addChildEventListener(new ChildEventListener() { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
        LoadData(dataSnapshot); 
       } 

       @Override 
       public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
        LoadData(dataSnapshot); 
       } 

       @Override 
       public void onChildRemoved(DataSnapshot dataSnapshot) { 

       } 

       @Override 
       public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 




     } 



     public void LoadData (DataSnapshot dataSnapshot){ 
      for(DataSnapshot singlesnapshot :dataSnapshot.getChildren()){ 
       String taskTitle =singlesnapshot.getValue(String.class); 

       movies_.add(new ModelClass(taskTitle)); 

       adapter = new MyAdapter(MainActivity.this, movies_); 
       recyclerView.setAdapter(adapter); 



      } 

     } 

    } 


And this is my Adapter class . 







public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { 




protected Context c; 
    List<ModelClass> movies; 

public MyAdapter(Context c, List<ModelClass> movies) { 
    this.c = c; 
    this.movies = movies; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_activity,parent,false); 
    MyViewHolder holder = new MyViewHolder(v); 
    return holder; 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 

    holder.name.setText(movies.get(position).getName()); 
    // PicassoClient.downloadImage(c,movies.get(position).getUrl(),holder.img); 

} 

@Override 
public int getItemCount() { 
    return movies.size(); 
} 

}

下面是我的火力地堡数据库

Firebase Console data am trying to fetch

+3

的【什么是一个NullPointerException,如何解决呢?(可能的复制http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception - 我怎么办 - 我 - 修复它) – Ironman

+1

请@Ironman它不是重复的,但无论是很多都是空指针,尝试通读我的文章。 :) –

回答

2
private DatabaseReference mMovieRef =mRef.child("Name"); 

MREF的控制台未创建又那么它是无效,将抛出NullPointerException

解决方案:

更改您的声明:

private DatabaseReference mMovieRef; 

和值分配给它创建MREF

后 ​​
+0

是的,那个错误已经改变了,但是我正在体验另一个@PoprostyRonin,它是'com.google.firebase.database.DatabaseException:无法将java.util.HashMap类型的值转换为字符串' –

+0

Ooooh yeah我有得到了错误的原因,我的数据格式很差,我已经调整它现在它的工作完美。 :) @ @PoprostyRonin –

+0

Damm我已经在写一个编辑:) – pr0gramist

0

可能DatabaseReference不intialized:尝试使用:

 private DatabaseReference mMovieRef =new DatabaseReference() 
       mRef.child("Name"); 

或在这里它可以是:

 private DatabaseReference mMovieRef =FirebaseDatabase.getInstance().getReferenceFromUrl("xxxxxxxxxxxxxxxxxxxxxx"); 
mRef.child("Name"); 

代替

private DatabaseReference mMovieRef =mRef.child("Name"); 
相关问题