adapter.notifyDataSetChanged不会刷新回收者视图

问题描述 投票:2回答:1

我正在尝试制作类似聊天应用程序的程序,但是我当然需要我的应用程序刷新新添加的消息,但是这次我使用的是SQL,而不是sqlite或firebase,只有普通的mssql,其中我使用jtds库,但是每次我使用以下代码并添加myAppAdapter.notifyDataSetChanged();时,它都没有显示任何数据到我的recycleview中有什么帮助?] >

这是我的onCreate方法:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        getSupportActionBar().hide();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);


        emojiButton = (ImageView)findViewById(R.id.emoji_button);
        submitButton = (ImageView)findViewById(R.id.submit_button);
        emojiconEditText = (EmojiconEditText)findViewById(R.id.emojicon_edit_text);
        emojIconActions = new EmojIconActions(getApplicationContext(),activity_chat,emojiButton,emojiconEditText);
        SyncData syncData = new SyncData();
        syncData.SyncoData("");
        syncData.execute();

        //emojIconActions.ShowEmojicon();


        submitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                try{
                    String editTextData = emojiconEditText.getText().toString();
                    SyncData orderdata = new SyncData();
                    orderdata.SyncData(editTextData);
                    Date c = Calendar.getInstance().getTime();
                    SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
                    String formattedDate = df.format(c);
                    orderdata.SyncoData("Insert into CustomerSupportChat values('" + formattedDate + "','" + editTextData + "','Customer','3','" + getIntent().getStringExtra("nameid") + "','1','1') ");
                    orderdata.execute();
                    emojiconEditText.setText("");
                    emojiconEditText.requestFocus();
                }
                catch(Exception e) {
                    Log.e("ActivityName", "Exception caused by editText " + e.toString());
                }
            }
        });





        connectionClass = new ConnectionClass();
        itemArrayList = new ArrayList<ClassListChat>();
        listOfMessage = (RecyclerView) findViewById(R.id.list_of_message);


    }

这是我从表中获取数据:

private class SyncData extends AsyncTask<String, String, String> {
        String msg;
        ProgressDialog progress;
        String editTextData;

        Date c = Calendar.getInstance().getTime();
        SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
        String formattedDate = df.format(c);



        public void SyncData(String editTextData) {
            this.editTextData = editTextData;
        }
        String inquery = "Insert into CustomerSupportChat values('" + formattedDate + "','" + editTextData + "','Customer','3','" + getIntent().getStringExtra("nameid") + "','1','1') ";

        public void SyncoData(String inquery) {
            this.inquery = inquery;
        }
        @Override
        protected void onPreExecute() //Starts the progress dailog
        {
            progress = ProgressDialog.show(ChatActivity.this, "Loading...",
                  "Please Wait...", true);
        }

        @Override
        protected String doInBackground(String... strings)  // Connect to the database, write query and add items to array list
        {

            runOnUiThread(new Runnable() {
                public void run() {


                    try {
                        Connection conn = connectionClass.CONN(); //Connection Object
                        if (conn == null) {
                            success = false;
                            msg = "Sorry something went wrong,Please check your internet connection";
                        } else {


                            // Change below query according to your own database.
                            Date c = Calendar.getInstance().getTime();
                            SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
                            String formattedDate = df.format(c);
                            System.out.println("it isssssssssssssssssssssssssssssssssssssssssaaaaaaaaaaaaaaaaaaaa" + formattedDate);


                            String query = inquery +
                                    "Select MessageID,MessageDate,MessageText,SenderType,MessageRecieved,MessageReaded,Users_Login_Data.Username,StoresData.StoreEnglishName,StoresData.StoreArabicName FROM " +
                                    "CustomerSupportChat INNER JOIN Users_Login_Data ON " +
                                    "CustomerSupportChat.CustomerID = Users_Login_Data.CustomerID INNER JOIN StoresData ON " +
                                    "CustomerSupportChat.StoreID = StoresData.StoreID Where SenderType = 'Customer' ORDER BY MessageID DESC";
                            String query2 =
                                    "Select MessageID,MessageDate,MessageText,SenderType,MessageRecieved,MessageReaded,Users_Login_Data.Username,StoresData.StoreEnglishName,StoresData.StoreArabicName FROM " +
                                            "CustomerSupportChat INNER JOIN Users_Login_Data ON " +
                                            "CustomerSupportChat.CustomerID = Users_Login_Data.CustomerID INNER JOIN StoresData ON " +
                                            "CustomerSupportChat.StoreID = StoresData.StoreID Where SenderType = 'Store'";


                            Statement stmt2 = conn.createStatement();


                            ResultSet rs2 = stmt2.executeQuery(query2);
                            Statement stmt = conn.createStatement();
                            ResultSet rs = stmt.executeQuery(query);


                            itemArrayList.clear();

                                if (rs != null) // if resultset not null, I add items to itemArraylist using class created
                                {
                                    while (rs.next()) {

                                        try {
                                            itemArrayList.add(new ClassListChat(rs.getString("MessageText"), rs.getString("SenderType"), ""));
                                            System.out.println("THEY AREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE " + rs.getString("MessageDate") + " " + rs.getString("MessageText") + " " + rs.getString("SenderType") + " " + rs2.getString("MessageText"));
                                        } catch (Exception ex) {
                                            ex.printStackTrace();
                                        }
                                    }

                                    msg = "Found";
                                    success = true;
                                } else {
                                    msg = "No Data found!";
                                    success = false;
                                }

                                if ( rs2 != null){
                                    while (rs2.next()){
                                        itemArrayList.add(new ClassListChat("","Store",rs2.getString("MessageText")));
                                    }
                                }

                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        Writer writer = new StringWriter();
                        e.printStackTrace(new PrintWriter(writer));
                        msg = writer.toString();
                        Log.d("Error", writer.toString());
                        success = false;
                    }

                }
            });
            return msg;
        }


        @Override
        protected void onPostExecute(String msg) // disimissing progress dialoge, showing error and setting up my listview
        {

            progress.dismiss();
            if (msg != null) {
                Toast.makeText(ChatActivity.this, msg + "", Toast.LENGTH_LONG).show();
            }

            if (!success) {
                Toast.makeText(ChatActivity.this,"ERROR " + msg,Toast.LENGTH_LONG).show();
            } else {
                try {
                    MyAppAdapter appAdapter = new MyAppAdapter(itemArrayList,ChatActivity.this);
                    listOfMessage.setAdapter(appAdapter);
                    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(ChatActivity.this);
                    linearLayoutManager.setReverseLayout(true);
                    listOfMessage.setLayoutManager(linearLayoutManager);

                } catch (Exception ex) {

                }

            }
        }

    }

这是我的应用适配器:

public class MyAppAdapter extends RecyclerView.Adapter<MyAppAdapter.ViewHolder>//has a class viewholder which holds
    {
        private ArrayList<ClassListChat> mOriginalValues; // Original Values
        private ArrayList<ClassListChat> mDisplayedValues;

        public class ViewHolder extends RecyclerView.ViewHolder {

            TextView messageText;
            TextView messageStore;
            TextView messageUser;
            TextView messageTime;

            public ViewHolder(@NonNull View itemView) {
                super(itemView);
                messageText = itemView.findViewById(R.id.message_text);
                messageUser = itemView.findViewById(R.id.message_user);
                messageTime = itemView.findViewById(R.id.message_time);
                messageStore = itemView.findViewById(R.id.message_text_store);
            }
        }

        public List <ClassListChat> parkingList;

        public Context context;
        ArrayList<ClassListChat> arraylist;


        private MyAppAdapter(List<ClassListChat> apps, Context context) {
            this.parkingList = apps;
            this.context = context;
            this.notifyDataSetChanged();
            arraylist = new ArrayList<ClassListChat>();
            arraylist.addAll(parkingList);
            myAppAdapter.notifyDataSetChanged();
        }



        @Override
        public MyAppAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
            View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.listcontentstorechat,parent,false);
            ViewHolder viewHolder = new ViewHolder(rowView);

                LayoutInflater inflater = getLayoutInflater();
                rowView = inflater.inflate(R.layout.listcontentstorechat, parent, false);


            // here setting up names and images




            return viewHolder;
        }

        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {



            holder.messageText.setText(parkingList.get(position).getMessageText());
            holder.messageUser.setText(parkingList.get(position).getMessageUser());
            holder.messageStore.setText(parkingList.get(position).getMessageOther());
            holder.messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", parkingList.get(position).getMessageTime()));
            if (holder.messageText.getText().toString().equals("")){
                holder.messageText.setVisibility(View.GONE);
            }

            if (holder.messageStore.getText().toString().equals("")){
                holder.messageStore.setVisibility(View.GONE);
            }
        }

        @Override
        public int getItemCount() {
            if (arraylist != null)

                return arraylist.size();
            else
                return 0;
        }
    }
    }

我将非常感谢您的辛勤工作!

[我正在尝试制作类似聊天应用程序的程序,但是我当然需要我的应用程序来刷新新添加的消息,但是这次我使用的是sql而不是sqlite或firebase,只有我使用jtds的普通mssql ...

java android sql android-recyclerview recycler-adapter
1个回答
0
投票

您的Asynctask代码是正确的更改适配器代码,如下所示

© www.soinside.com 2019 - 2024. All rights reserved.