2016-12-05 11 views
-2

Firebase StorageからFirebaseデータベースにURLが格納されているrecyclerviewに画像を表示しようとしていますが、Firebaseから何も返されていないようです。Android:FirebaseからArraylistにURLを取得できません

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
HashMap<String,String> m; 
ArrayList<String> links; 
private FirebaseStorage storage; 
private StorageReference storagereference; 
private FirebaseDatabase database; 
private DatabaseReference myRef; 

MyAdapter(){ 
    database = FirebaseDatabase.getInstance(); 
    myRef = database.getReference("Links"); 
    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      m=(HashMap<String, String>) dataSnapshot.getValue(); 
      links=new ArrayList<String>(m.values()); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 
    CardView cv; 
    ImageView iv; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     cv = (CardView)itemView.findViewById(R.id.cardView); 
     iv = (ImageView)itemView.findViewById(R.id.imageView); 
    } 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.ground_recycler_view, parent, false); 
    //do some modifications such as set the view's size, margins, paddings and layout parameters if required 
    ViewHolder vh=new ViewHolder(v); 
    return vh; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    Glide.with(holder.iv.getContext()).load(links.get(position)).centerCrop().thumbnail(0.1f).crossFade() 
      .diskCacheStrategy(DiskCacheStrategy.ALL).into(holder.iv); 
} 

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

Logcat

FATAL EXCEPTION: main 
        Process: idk.cricsters, PID: 22958 
        java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference 
         at idk.cricsters.MyAdapter.getItemCount(MyAdapter.java:87) 
         at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:2938) 
         at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2904) 
         at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3283) 
         at android.view.View.layout(View.java:16630) 
         at android.view.ViewGroup.layout(ViewGroup.java:5437) 
         at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079) 
         at android.view.View.layout(View.java:16630) 
         at android.view.ViewGroup.layout(ViewGroup.java:5437) 
         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
         at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
         at android.view.View.layout(View.java:16630) 
         at android.view.ViewGroup.layout(ViewGroup.java:5437) 
         at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) 
         at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) 
         at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) 
         at android.view.View.layout(View.java:16630) 
         at android.view.ViewGroup.layout(ViewGroup.java:5437) 
         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
         at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
         at android.view.View.layout(View.java:16630) 
         at android.view.ViewGroup.layout(ViewGroup.java:5437) 
         at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) 
         at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) 
         at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) 
         at android.view.View.layout(View.java:16630) 
         at android.view.ViewGroup.layout(ViewGroup.java:5437) 
         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
         at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
         at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678) 
         at android.view.View.layout(View.java:16630) 
         at android.view.ViewGroup.layout(ViewGroup.java:5437) 
         at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171) 
         at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931) 
         at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
         at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
         at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
         at android.view.Choreographer.doFrame(Choreographer.java:606) 
         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:148) 
         at android.app.ActivityThread.main(ActivityThread.java:5417) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

答えて

1

がある他の問題も、価値がデータベースから返され、ここで競合状態があるかもしれないまでlinksはnullになりますように私には発生することがあります。

getItemCountのリンクのnullチェックを追加します。 さらに、GlideとFirebase Storageを使用してこのサンプルをチェックしてください。

関連する問題