实际上我正试图通过从服务器(mongodb)获取一组帖子来显示recyclelerview中的帖子,并且它运行正常。然后我试图在post's username
的帮助下加载post_ owner_mail
。您可能会说我为什么要将这些内容置于明确位置而不是批量处理,但因为会有不同ownerMail
的帖子所以不可能预取他们的用户名。为此,我使用一个单独的类来从服务器加载数据并在文本视图中显示。但现在的问题是虽然textview
设置的是用户名但不是所有时间,而且recyclerview也是滞后。任何人都可以帮我摆脱这个问题。
适配器类代码:
@Override
public void onBindViewHolder( CustomRecyclerViewHolder holder, int position) {
//It's a data model class of image_links and post_owner_mails
TimelineData timelineData=totalList.get(holder.getAdapterPosition());
//It's the custom loader class through which I'm loading data and setting to txt view position wise
LoadData d=new LoadData(hold.userNameTxtView,timelineData.getPostOwnerMail());
}
LoadData类:
public class LoadData{
private Socket socket;
{
try{
socket = IO.socket("http://192.168.43.218:8080");
}catch(URISyntaxException e){
throw new RuntimeException(e);
}
}
public LoadData(final TextView tv,final String email){
socket.disconnect();
socket.connect();
JSONObject ob=new JSONObject();
try {
ob.put("getFullnameMail",email);
socket.emit("data",ob);
socket.on("fullname", new Emitter.Listener() {
@Override
public void call(Object... args) {
final JSONObject ob=(JSONObject)args[0];
Needle.onMainThread().execute(new Runnable() {
@Override
public void run() {
try {
tv.setText(ob.getString("fullname"));
socket.disconnect();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}
数据库存储模式:
{
"_id" : ObjectId("5aa9304391b4ee28f4e4525d"),
"post_owner_mail" : "john.cena",
"time" : "14 Mar 2018(01-30-50)",
"img_link" : [
"192.168.43.218:8080/user_info/john.cena/uploads/14 Mar 2018(01-30-50)/pic0.jpg",
"192.168.43.218:8080/user_info/john.cena/uploads/14 Mar 2018(01-30-50)/pic1.jpg"
],
"caption" : "#fun#cartoon"
}
答案 0 :(得分:0)
您有几个解决方案可以解决此问题:
1)您可以将电子邮件地址与您呈现给用户的项目组合在一起(基本上您正在创建一个包含旧数据+电子邮件的新对象,或者只是向旧对象添加另一个字段),您要求访问数据库/服务器/服务,只需添加要添加到每个项目的必填字段(电子邮件)。
2)如果您无法访问数据库/服务,您可以创建一个加载程序,在您加载这两个项目时将显示给用户(旧项目和电子邮件,您将获取电子邮件在设置适配器之前已经为每个项目设置了
3)不同的方法是根据请求显示电子邮件,只需添加一个按钮(或箭头图像),当用户点击它时,它将按您的意愿请求电子邮件并将其呈现在项目中你选了。您的问题有不同的方法。 如果显示电子邮件并不重要,我会使用方法3。