Я пытаюсь создать что-то вроде приложения чата, но, конечно, мне нужно, чтобы мое приложение обновляло sh недавно добавленные сообщения, но на этот раз я использую sql, а не sqlite или firebase, только обычная мс sql где я использую библиотеку 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;
}
}
}
Я был бы очень признателен за любую тяжелую работу!