Java 如何为聊天应用程序创建RecyclerView适配器?

Java 如何为聊天应用程序创建RecyclerView适配器?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我试图为android开发一个聊天应用程序,所以我使用了RecyclerView。适配器有问题,我的聊天室显示的JSON响应为空。我的代码有什么遗漏吗 这是我的适配器类 public class PesanRecycleAdapter extends RecyclerView.Adapter<PesanRecycleAdapter.ViewHolder> { private String username; private Context context; private in

我试图为android开发一个聊天应用程序,所以我使用了
RecyclerView
。适配器有问题,我的聊天室显示的JSON响应为空。我的代码有什么遗漏吗

这是我的适配器类

public class PesanRecycleAdapter extends RecyclerView.Adapter<PesanRecycleAdapter.ViewHolder> {


private String username;
private Context context;

private int SELF = 786;

private ArrayList<Pesan> pesan;

public PesanRecycleAdapter(Context context, ArrayList<Pesan> pesan, String username){
    this.username = username;
    this.pesan = pesan;
    this.context = context;
}

@Override
public int getItemViewType(int position) {

    Pesan psn = pesan.get(position);

    if (psn.getUsernameFrom() == username) {
        return SELF;
    }

    return position;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView;
    if (viewType == SELF) {
        itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.chat_thread_me, parent, false);
    } else {
        itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.chat_thread_other, parent, false);
    }
    return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Pesan psn = pesan.get(position);
    holder.textViewMessage.setText(psn.getPesan());
    holder.textViewTime.setText(psn.getSentAt());
}


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

public class ViewHolder extends RecyclerView.ViewHolder {
    public TextView textViewMessage;
    public TextView textViewTime;

    public ViewHolder(View itemView) {
        super(itemView);
        textViewMessage = (TextView) itemView.findViewById(R.id.textViewMessage);
        textViewTime = (TextView) itemView.findViewById(R.id.textViewTime);
    }
}
}
公共类PesanRecycleAdapter扩展了RecyclerView.Adapter{
私有字符串用户名;
私人语境;
私人int SELF=786;
私人ArrayList pesan;
公共PesanRecycleAdapter(上下文上下文、ArrayList pesan、字符串用户名){
this.username=用户名;
this.pesan=pesan;
this.context=上下文;
}
@凌驾
public int getItemViewType(int位置){
Pesan psn=Pesan.get(位置);
if(psn.getUsernameFrom()==用户名){
回归自我;
}
返回位置;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
查看项目视图;
if(viewType==SELF){
itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.chat\u-thread\u-me,父级,false);
}否则{
itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.chat\u thread\u other,父级,false);
}
返回新的ViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
Pesan psn=Pesan.get(位置);
holder.textViewMessage.setText(psn.getPesan());
holder.textViewTime.setText(psn.getSentAt());
}
@凌驾
public int getItemCount(){
返回pesan.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图文本视图消息;
公共文本查看文本查看时间;
公共视图持有者(视图项视图){
超级(项目视图);
textViewMessage=(TextView)itemView.findViewById(R.id.textViewMessage);
textViewTime=(TextView)itemView.findViewById(R.id.textViewTime);
}
}
}
欢迎提供任何帮助或建议

这里是我在活动中使用适配器的地方

public void getpesan() {
    try {

        apiservice.get_pesan(username, "ahnafgg").enqueue(new Callback<ResponPesan>() {
            @Override
            public void onResponse(Call<ResponPesan> call, Response<ResponPesan> response) {

                Log.d(TAG, "onResponse: response..."+response);

                dummyData = response.body().getPesan();
                createRecycleView();
            }
            @Override
            public void onFailure(Call<ResponPesan> call, Throwable t) {

                Log.d(TAG, "onFailure: response...");
                Toast.makeText(RuangPesan.this,"Gagal ambil chat",Toast.LENGTH_SHORT).show();
            }
        });

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}


public  void createRecycleView(){
    adapter = new PesanRecycleAdapter(RuangPesan.this, pesan, username);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    Log.d(TAG, "********************************");
    scrollToBottom();
}
public void getpesan(){
试一试{
apiservice.get_pesan(用户名,“ahnafgg”).enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.d(标签“onResponse:response…”+response);
dummyData=response.body().getPesan();
createRecycleView();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(标签“onFailure:response…”);
Toast.makeText(RuangPesan.this,“Gagal ambil chat”,Toast.LENGTH_SHORT.show();
}
});
}捕获(例外情况除外){
例如printStackTrace();
}
}
public void createRecycleView(){
适配器=新PesanRecycleAdapter(RuangPesan.this,pesan,用户名);
recyclerView.setAdapter(适配器);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
Log.d(标签“**********************************”);
scrollToBottom();
}

我认为这里一切正常,可能您忘记了为recyclerView设置layoutManager或在设置数据后通知适配器

可能您忘记了在初始化recyclerView之前在模型中设置日期 使用活动类中的以下方法:

    initData(); //Do this first
    RecyclerView recyclerView = findViewById(R.id.recyclerview);

    Context context = MainActivity.this;
    PesanRecycleAdapter pesanRecycleAdapter = new PesanRecycleAdapter(context, list,"Fahad");

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(linearLayoutManager);

    recyclerView.setAdapter(pesanRecycleAdapter);

你在哪里使用这个适配器。。。你能告诉我那个活动的代码吗