Java 如何使用毕加索从Firebase获取图像到RecyclerView
从firebase实时数据库获取图像时遇到问题。图像在存储器中,我在数据库中有一个指向它们的链接,但当我试图让图像显示在recyclerview中时,应用程序在尝试加载记录时崩溃。我已经在gradle.app中添加了依赖项,并且我已经拒绝使用互联网 获取数据的代码Java 如何使用毕加索从Firebase获取图像到RecyclerView,java,android,firebase,android-recyclerview,Java,Android,Firebase,Android Recyclerview,从firebase实时数据库获取图像时遇到问题。图像在存储器中,我在数据库中有一个指向它们的链接,但当我试图让图像显示在recyclerview中时,应用程序在尝试加载记录时崩溃。我已经在gradle.app中添加了依赖项,并且我已经拒绝使用互联网 获取数据的代码 @Override public void onBindViewHolder(RestaurantViewHolder holder, int position) { Restaurant restaurant = resta
@Override
public void onBindViewHolder(RestaurantViewHolder holder, int position) {
Restaurant restaurant = restaurantList.get(position);
holder.title.setText(restaurant.getTitle());
holder.address.setText(restaurant.getAddress());
holder.cuisine.setText(restaurant.getCuisine());
holder.duration.setText(restaurant.getDuration());
holder.PriceRange.setText(restaurant.getPriceRange());
Picasso.with(context).load(restaurantList.get(position).getImage()).resize(120,90).into(holder.imageView);
}
设置数据的代码
public class RestaurantViewHolder extends RecyclerView.ViewHolder{
TextView title, address, cuisine, duration, PriceRange;
ImageView imageView;
public RestaurantViewHolder(View itemView) {
super(itemView);
title = itemView.findViewById(R.id.textViewTitle);
address = itemView.findViewById(R.id.textViewAddress);
cuisine = itemView.findViewById(R.id.textViewCuisine);
duration = itemView.findViewById(R.id.textViewDuration);
PriceRange = itemView.findViewById(R.id.textViewPriceRange);
imageView = itemView.findViewById(R.id.viewImage);
}
}
设置/获取方法
public class Restraunt{
public Restaurant(String image) {
this.image = image;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
事故日志
04-20 20:30:14.528 30759-30759/nci.wherenow E/AndroidRuntime: FATAL EXCEPTION: main
Process: nci.wherenow, PID: 30759
java.lang.IllegalArgumentException: Context must not be null.
at com.squareup.picasso.Picasso$Builder.<init>(Picasso.java:701)
at com.squareup.picasso.Picasso.with(Picasso.java:662)
at nci.wherenow.RestaurantAdapter.onBindViewHolder(RestaurantAdapter.java:48)
at nci.wherenow.RestaurantAdapter.onBindViewHolder(RestaurantAdapter.java:19)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6482)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6515)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5458)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5724)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3109)
at android.view.View.measure(View.java:22104)
at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:934)
at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:973)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:400)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:722)
at android.view.View.measure(View.java:22104)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2441)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1522)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1775)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1410)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6834)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doCallbacks(Choreographer.java:778)
at android.view.Choreographer.doFrame(Choreographer.java:713)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6809)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
崩溃更新2
04-20 20:45:41.030 4227-4227/nci.wherenow E/AndroidRuntime: FATAL EXCEPTION: main
Process: nci.wherenow, PID: 4227
java.lang.IllegalArgumentException: Context must not be null.
at com.squareup.picasso.Picasso$Builder.<init>(Picasso.java:701)
at com.squareup.picasso.Picasso.with(Picasso.java:662)
at nci.wherenow.RestaurantAdapter.onBindViewHolder(RestaurantAdapter.java:48)
at nci.wherenow.RestaurantAdapter.onBindViewHolder(RestaurantAdapter.java:19)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6482)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6515)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5458)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5724)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3109)
at android.view.View.measure(View.java:22104)
at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:934)
at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:973)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:400)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:22104)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:722)
at android.view.View.measure(View.java:22104)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2441)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1522)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1775)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1410)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6834)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doCallbacks(Choreographer.java:778)
at android.view.Choreographer.doFrame(Choreographer.java:713)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6809)
at java.lang.reflect.Method.invoke(Native Method)
04-20 20:45:41.031 4227-4227/nci.wherenow E/AndroidRuntime: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
04-20 20:45:41.030 4227-4227/nci.wherenow E/AndroidRuntime:FATAL EXCEPTION:main
进程:nci.wherenow,PID:4227
java.lang.IllegalArgumentException:上下文不能为null。
在com.squareup.picasso.picasso$Builder上
位于com.squareup.picasso.picasso.with(picasso.java:662)
位于nci.wherenow.RestaurantAdapter.onBindViewHolder(RestaurantAdapter.java:48)
位于nci.wherenow.RestaurantAdapter.onBindViewHolder(RestaurantAdapter.java:19)
位于android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6482)
位于android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6515)
在android.support.v7.widget.RecyclerView$Recycler.TryBindViewHolderByDadline(RecyclerView.java:5458)上
在android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderFormationByDaildate(RecyclerView.java:5724)上
位于android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563)
位于android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559)
位于android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)
位于android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)
位于android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)
位于android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)
位于android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693)
位于android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3109)
在android.view.view.measure(view.java:22104)
位于android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:934)
位于android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:973)
在android.view.view.measure(view.java:22104)
位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
位于android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
位于android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
在android.view.view.measure(view.java:22104)
位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
位于android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:400)
在android.view.view.measure(view.java:22104)
位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
位于android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
在android.view.view.measure(view.java:22104)
位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
位于android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
位于android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
位于android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
在android.view.view.measure(view.java:22104)
位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6584)
位于android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
位于com.android.internal.policy.DecorView.onMeasure(DecorView.java:722)
在android.view.view.measure(view.java:22104)
在android.view.ViewRootImpl.performMeasure上(ViewRootImpl.java:2441)
在android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1522)
在android.view.ViewRootImpl.performTraversals上(ViewRootImpl.java:1775)
位于android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1410)
在android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6834)
在android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
位于android.view.Choreographer.doCallbacks(Choreographer.java:778)
位于android.view.Choreographer.doFrame(Choreographer.java:713)
在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)中
位于android.os.Handler.handleCallback(Handler.java:789)
位于android.os.Handler.dispatchMessage(Handler.java:98)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6809)
位于java.lang.reflect.Method.invoke(本机方法)
04-20 20:45:41.031 4227-4227/nci.wherenow E/AndroidRuntime:com.android.internal.os.zyote$MethodAndArgsCaller.run(zyote.java:240)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
//在模型中声明餐厅空构造函数
java餐厅
public Restaurant() {
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
主要类别:-
在BindViewHolder上替换代码
Restaurant restaurant = new Restaurant();
Picasso.with(getContext()).load(restaurant.getImage()).resize(200, 200).into(holder.
imageView);
在活动中尝试此操作,将“this”传递给适配器,如:
RecyclerAdapter r = new RecyclerAdapter(this);
然后在RecyclerAdapter类构造函数中:
Context context; // global
public RecyclerAdapter(Context context){
this.context = context;
}
您的上下文为空,这就是问题所在,请尝试将上下文从活动(将适配器添加到回收器视图的位置)传递到RestaurantAdapter(到构造函数),并与毕加索一起使用
在活动中使用getBaseContext()(您在其中创建了Restaurent适配器的实例),并将其传递给适配器构造函数,然后在毕加索中使用它。您只需初始化上下文即可。您可以如上所述将其传递给适配器构造函数。或者,您可以在应用程序类中定义静态上下文,并在应用程序类onCreate方法中对其进行初始化。但第一种更可能是这样。你能发布你的崩溃日志吗!添加了崩溃日志
上下文不能为null
。您正在将空上下文传递给毕加索。崩溃是否为l
Context context; // global
public RecyclerAdapter(Context context){
this.context = context;
}