Как отобразить правильный элемент из нового элемента RecyclerView в Android Studio? - PullRequest
0 голосов
/ 10 марта 2020

У меня возникла проблема с отображением нового элемента из node JS, проблема в том, что предыдущий элемент заменил новый элемент, Мой Android код

private void getDiskusiChat(String tabelchat) {
    socket.on(tabelchat, new Emitter.Listener() {
            @Override
            public void call(final Object... args) {
                if(getActivity() == null)
                    return;
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        JSONObject data = (JSONObject) args[0];


                        try {
                            //extract data from fired event

                            String namaget = String.valueOf(data.getString("nama"));
                            String pesanget = String.valueOf(data.getString("pesan"));
                            String iduserget = String.valueOf(data.getString("idleveluser"));
                            String leveluserget = String.valueOf(data.getString("level"));
                            String leveluserget2 = String.valueOf(Html.fromHtml(leveluserget));
                            String replyget = String.valueOf(data.getString("reply"));
                            String createdget = String.valueOf(data.getString("created_at"));
                            Log.i("cek", "cek socket.on : " + namaget+":"+pesanget+":"
                                    +iduserget+":"+leveluserget+":"+replyget+":"+createdget);
                            String leveluserget4 = "";
                            if (leveluserget2.equals("Teacher")){
                                leveluserget4 = "teacher";
                            }else if (leveluserget2.equals("Administrator")){
                                leveluserget4 = "administrator";
                            }else if (leveluserget2.isEmpty()){
                                leveluserget4 = "member";
                            }
                            String[]pisahid = iduserget.split("-");
                            String leveluserget3 = pisahid[0];
                            SemuaChat semuaChat = new SemuaChat(leveluserget4, pesanget, replyget, createdget, namaget);

                            kelasget.add(semuaChat);
                            mAdapter = new AdapterDiskusi(mContext, kelasget);
                            mRecyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);

                            mRecyclerView.getLayoutManager().smoothScrollToPosition(mRecyclerView,new RecyclerView.State(), kelasget.size());

                            NotificationManager notif=(NotificationManager)getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
                            Notification notify= null;
                            notify = new Notification.Builder
                                    (getActivity())
                                    .setContentTitle("Pesan Baru")
                                    .setContentText(pesanget)
                                    .setContentTitle(namaget)
                                    .setSmallIcon(R.drawable.pesanmasuk)
                                    .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
                                    .build();


                            notify.flags |= Notification.FLAG_AUTO_CANCEL;
                            notif.notify(0, notify);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });

            }
        });
}

Мой адаптер включен

@Override
public void onBindViewHolder (final AdapterDiskusi.MyViewHolder holder, final int position){
    final SemuaChat listartikel = ChatList.get(position);

    ApiConfig apiConfig = new ApiConfig();
    holder.tgl.setText( listartikel.getCreated());
    if (ChatList.get(position).getLeveluser().equals("admin")){
        holder.pesan.setText(listartikel.getPesan());
        holder.lvluser.setText(" ("+listartikel.getLeveluser()+" )");
        InterfaceMember MemberapiInterface;
        MemberapiInterface = ApiClient.createService(InterfaceMember.class, apiConfig.USERNAME, apiConfig.PASSWORD);
        Call<ResponseBody> kontakCall = MemberapiInterface.ProfilAdmin(ChatList.get(position).getId_user());
        kontakCall.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                ResponseBody KontakList = response.body();
                holder.nama.setText("Admin");
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.e("Retrofit Get", t.toString());
            }
        });
    }else if (ChatList.get(position).getLeveluser().equals("administrator")){
        holder.nama.setText("Admin");
        holder.pesan.setText(Html.fromHtml(listartikel.getPesan()));
        holder.lvluser.setText(" ("+"admin"+" )");
    }else if (ChatList.get(position).getLeveluser().equals("teacher")){
        holder.nama.setText(listartikel.getNama());
        holder.pesan.setText(Html.fromHtml(listartikel.getPesan()));
        holder.lvluser.setText(" ("+"ahli"+" )");
    }else if (ChatList.get(position).getLeveluser().equals("member")){
        holder.nama.setText(listartikel.getNama());
        holder.pesan.setText(Html.fromHtml(listartikel.getPesan()));
        holder.lvluser.setText("");
    } else if (ChatList.get(position).getLeveluser().equals("ahli")){
        holder.lvluser.setText(" ("+listartikel.getLeveluser()+" )");
        holder.pesan.setText(listartikel.getPesan());
        if (ChatList.get(position).getNama()!= null){
            holder.nama.setText(ChatList.get(position).getNama());
        }else{
            InterfaceMitraAhli MemberapiInterface;
            MemberapiInterface = ApiClient.createService(InterfaceMitraAhli.class, apiConfig.USERNAME,apiConfig.PASSWORD);
            Call<List<ProfileMitraAhli>> kontakCall = MemberapiInterface.ProfilAhli(ChatList.get(position).getId_user());
            kontakCall.enqueue(new Callback<List<ProfileMitraAhli>>() {
                @Override
                public void onResponse(Call <List<ProfileMitraAhli>> call, Response<List<ProfileMitraAhli>> response) {
                    List<ProfileMitraAhli> KontakList = response.body();
                    holder.nama.setText(KontakList.get(0).getNama());
                }
                @Override
                public void onFailure(Call<List<ProfileMitraAhli>> call, Throwable t) {
                    Log.e("Retrofit Get", t.toString());
                }
            });
        }

    }else if (ChatList.get(position).getLeveluser().equals("user")){
        holder.lvluser.setText("");
        holder.pesan.setText(listartikel.getPesan());
        if (ChatList.get(position).getNama()!=null){
            holder.nama.setText(ChatList.get(position).getNama());
        }else {
            InterfaceMember MemberapiInterface;
            MemberapiInterface = ApiClient.createService(InterfaceMember.class, apiConfig.USERNAME, apiConfig.PASSWORD);
            Call<List<ProfileMember>> kontakCall = MemberapiInterface.ProfilUser(ChatList.get(position).getId_user());
            kontakCall.enqueue(new Callback<List<ProfileMember>>() {
                @Override
                public void onResponse(Call<List<ProfileMember>> call, Response<List<ProfileMember>> response) {
                    List<ProfileMember> KontakList = response.body();
                    holder.nama.setText(KontakList.get(0).getNama());
                }

                @Override
                public void onFailure(Call<List<ProfileMember>> call, Throwable t) {
                    Log.e("Retrofit Get", t.toString());
                }
            });
        }
    }
}

Мой Node JS

io.on('connection', function (socket) {

console.log( "New client connected !" );
//console.log(socket.handshake.headers.host);

socket.on( 'new_chat_kelas', function( data ) {
    io.sockets.emit( data.tabelchat, {
        idleveluser: data.idleveluser,
        nama: data.nama,
        level: data.level,
        idchat: data.idchat,
        pesan: data.pesan,
        file: data.file,
        reply: data.reply,
        created_at: data.created_at
    });
});

это мой ScreenShoot, я могу получить данные с узла, но не могу установить c значение для имени в новом элементе Problem1

если я перефразирую sh, все возвращается в нормальное состояние, как это enter image description here

Может ли кто-нибудь мне помочь? Я благодарен, если кто-то может решить мою проблему

...