我正在尝试制作类似聊天应用程序的程序,但是我当然需要我的应用程序刷新新添加的消息,但是这次我使用的是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 ...
您的Asynctask代码是正确的更改适配器代码,如下所示