Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果我能';i don’我不能理解上下文我怎样才能像Picaso一样使用?_Android_Firebase_Firebase Realtime Database_Picasso - Fatal编程技术网

Android 如果我能';i don’我不能理解上下文我怎样才能像Picaso一样使用?

Android 如果我能';i don’我不能理解上下文我怎样才能像Picaso一样使用?,android,firebase,firebase-realtime-database,picasso,Android,Firebase,Firebase Realtime Database,Picasso,我使用firbase ui显示一个recyclerView,它扩展了活动,如下所示: FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<ChatItem, ExpenseHolder> (ChatItem.class, R.layout.chat_room_list, ExpenseHolder.class, secondRoot) { @Override

我使用firbase ui显示一个
recyclerView
,它扩展了活动,如下所示:

FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<ChatItem, ExpenseHolder>
                (ChatItem.class, R.layout.chat_room_list, ExpenseHolder.class, secondRoot) {
            @Override
            protected void populateViewHolder(ExpenseHolder viewHolder, ChatItem chatItem, int position) {
                viewHolder.setValues(chatItem);
            }
        };
        recyclerChat.scrollToPosition(adapter.getItemCount() - 1);//just let the latest data below
        //recyclerChat.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));//增加橫線
        recyclerChat.setAdapter(adapter);

        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerChat.setLayoutManager(manager);
当我想使用Picaso设置图像时,我发现无法获取
contex

我尝试在静态上下文上下文中设置全局
privat,它显示错误上下文为空

这是我想要展示的资源

如何在静态环境中显示资源为url的图像?

试试这种方法

Picasso.with(rightImage.getContext()).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
这样试试

Picasso.with(rightImage.getContext()).load("http://i.imgur.com/DvpvklR.png").into(rightImage);

您可以从
itemView

Picasso.with(itemView.getContext()).load("http://i.imgur.com/DvpvklR.png").into(rightImage);

您可以从
itemView

Picasso.with(itemView.getContext()).load("http://i.imgur.com/DvpvklR.png").into(rightImage);

您甚至可以通过将上下文传递到
ExpenseViewHolder

public static class ExpenseHolder extends RecyclerView.ViewHolder {
        private final TextView textRightMsg;
        private final TextView textLeftMsg;
        private final TextView rightTime;
        private final ImageView rightImage;
        private Context context;

        public ExpenseHolder(View itemView, Context context) {
            super(itemView);
            this.context = context;

            textRightMsg = (TextView) itemView.findViewById(R.id.textRight);
            textLeftMsg = (TextView) itemView.findViewById(R.id.textLeft);
            rightTime = (TextView) itemView.findViewById(R.id.rightTime);
            rightImage = (ImageView) itemView.findViewById(R.id.rightImage);
        }

        public void setValues(ChatItem chatItem) {
            String myName = chatItem.getName();
            if (myName.equals(userName)) {
                textRightMsg.setText(chatItem.getMsg() + "(" + chatItem.getName() + ")");
                rightTime.setText(chatItem.getTime());
// I don't know how to get context in this class                    
                Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
            } else {
                textLeftMsg.setText(chatItem.getMsg() + "(" + chatItem.getName() + ")");
            }
        }
    }

您甚至可以通过将上下文传递到
ExpenseViewHolder

public static class ExpenseHolder extends RecyclerView.ViewHolder {
        private final TextView textRightMsg;
        private final TextView textLeftMsg;
        private final TextView rightTime;
        private final ImageView rightImage;
        private Context context;

        public ExpenseHolder(View itemView, Context context) {
            super(itemView);
            this.context = context;

            textRightMsg = (TextView) itemView.findViewById(R.id.textRight);
            textLeftMsg = (TextView) itemView.findViewById(R.id.textLeft);
            rightTime = (TextView) itemView.findViewById(R.id.rightTime);
            rightImage = (ImageView) itemView.findViewById(R.id.rightImage);
        }

        public void setValues(ChatItem chatItem) {
            String myName = chatItem.getName();
            if (myName.equals(userName)) {
                textRightMsg.setText(chatItem.getMsg() + "(" + chatItem.getName() + ")");
                rightTime.setText(chatItem.getTime());
// I don't know how to get context in this class                    
                Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
            } else {
                textLeftMsg.setText(chatItem.getMsg() + "(" + chatItem.getName() + ")");
            }
        }
    }

请尝试
textRightMsg.getContext()
谢谢!它可以工作,我现在就可以试试
textRightMsg.getContext()
谢谢!它是有效的,我现在知道了。我认为它可能也可以解决这个问题,但是当我尝试它时,它显示错误java.lang.IllegalArgumentException:Context不能为null。那么最好使用视图的上下文。因为我刚才看到,viewholder的对象是自动启动的,而不是您使用自己的构造函数。我认为它可能也可以解决这个问题,但当我尝试时,它显示错误java.lang.IllegalArgumentException:Context不能为null。那么最好使用视图的上下文。因为我刚才看到,viewholder的对象是自动启动的,而不是使用自己的构造函数。下载图像是一个很长时间的后台过程,所以在使用活动上下文时要小心。您可能会导致内存泄漏。下载图像是一个长时间的后台过程,因此在使用活动上下文时要小心。您可能会导致内存泄漏。