Android Client von Datei mit ChatNachrichten auf DB umgestellt

This commit is contained in:
staccatomamba
2016-07-26 15:51:30 +02:00
parent 756ff91f5e
commit 27b283c20a
15 changed files with 298 additions and 220 deletions

View File

@@ -48,13 +48,16 @@ import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.crypto.NoSuchPaddingException;
import entities.ChatMessage;
import soapConnection.DataIdentifier;
import soapConnection.Packet;
import soapConnection.SoapConnectionManager;
import util.SecurityUtils;
import util.Util;
@@ -65,6 +68,8 @@ public class ChatActivity extends ActionBarActivity{
private static final String LOG_TAG = "CHAT";
private DatabaseHandler databaseHandler;
//View Variablen
protected TextView chat;
protected EditText text;
@@ -79,15 +84,15 @@ public class ChatActivity extends ActionBarActivity{
//Design View
protected ListView listView;
protected boolean isMe = true;
public static List<ChatMessageFormat> chatMessages;
public static ArrayAdapter<ChatMessageFormat> adapter;
public static List<ChatMessage> chatMessages;
public static ArrayAdapter<ChatMessage> adapter;
public static ChatMessageFormat chatMessage;
File file;
File Unsendfile = null;
File UnsentFile = null;
protected String name;
protected int personOid;
protected String recipientName;
protected int recipientPersonOid;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -100,7 +105,7 @@ public class ChatActivity extends ActionBarActivity{
action.setDisplayShowTitleEnabled(false);
LayoutInflater inflate = LayoutInflater.from(this);
View mCustomView = inflate.inflate(R.layout.custom_menuebar,null);
View mCustomView = inflate.inflate(R.layout.custom_menuebar, null);
// Initialiesiere die Variablen
@@ -109,8 +114,8 @@ public class ChatActivity extends ActionBarActivity{
//get Daten aus vorheriger Activity
Bundle zielkorb = getIntent().getExtras();
name = zielkorb.getString("Name");
personOid = zielkorb.getInt("RecipientOid");
recipientName = zielkorb.getString("Name");
recipientPersonOid = zielkorb.getInt("RecipientOid");
byte[] bildArray = zielkorb.getByteArray("Bild");
Bitmap customerImage;
@@ -121,18 +126,23 @@ public class ChatActivity extends ActionBarActivity{
titlepic.setImageBitmap(GetCircleBitmap(customerImage));
}
titlename.setText(name);
titlename.setText(recipientName);
action.setCustomView(mCustomView);
action.setDisplayShowCustomEnabled(true);
databaseHandler = new DatabaseHandler(this);
senden = (Button)findViewById(R.id.Sendebutton);
chatMessages = new ArrayList<>();
listView = (ListView)findViewById(R.id.list_msg);
adapter = new MessageAdapter(this, R.layout.item_chat_left,chatMessages);
DatabaseHandler handler = new DatabaseHandler(this);
chatMessages = databaseHandler.getMessagesForRecipient(recipientPersonOid);
adapter = new MessageAdapter(this, R.layout.item_chat_left, chatMessages);
listView.setAdapter(adapter);
try {
@@ -141,15 +151,11 @@ public class ChatActivity extends ActionBarActivity{
MainActivityMitarbeiter.CloseMainActivitySocketListener();
socketOutputStream = new DataOutputStream(socket.getOutputStream());
} catch(Exception e){
Log.e("CHAT_ERROR", "Fehler bei der Socket-Erstellung: " + e.getMessage());
}
CreateFile();
ReadMessageToStorage();
//ReadMessageToStorage();
text = (EditText)findViewById(R.id.editText);
@@ -165,13 +171,9 @@ public class ChatActivity extends ActionBarActivity{
}
});
//Erstelle einen immer horchenden Listener
Thread t = new Thread(new SocketListener());
t.start();
//MainActivityMitarbeiter.listen.sus
//sharedpreferences = true;
SharedPreferences sp = getSharedPreferences(Util.PREFS_NAME, 0);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean("IsInChatActivity", true);
@@ -181,16 +183,12 @@ public class ChatActivity extends ActionBarActivity{
public class MessageSender implements Runnable{
public void run(){
try{
Log.i(LOG_TAG, "Sende Nachricht...");
if(socket != null ) {
Log.d(LOG_TAG, "Ist der Socket mit dem Server Verbunden: " + (socket.isConnected()));
Packet p = new Packet();
p.ChatMessage = text.getText().toString();
p.ChatDataIdentifier = DataIdentifier.MESSAGE;
p.RecipientPersonOid = personOid;
p.RecipientPersonOid = recipientPersonOid;
SharedPreferences settings = getSharedPreferences(Util.PREFS_NAME, 0);
@@ -211,18 +209,23 @@ public class ChatActivity extends ActionBarActivity{
@Override
public void run() {
Log.i(LOG_TAG, "Führe GUI-Update durch...");
Calendar c = Calendar.getInstance();
Date now = c.getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String formattedDate = df.format(c.getTime());
String formattedDate = df.format(now);
saveCompleteMessage = text.getText().toString()+"/"+isMe+"%"+formattedDate+"\n";
// saveCompleteMessage = text.getText().toString()+"/"+isMe+"%"+formattedDate+"\n";
//
// WriteMessagesfromStorage(text.getText().toString()+"/"+isMe+"%"+formattedDate+"\n");
WriteMessagesfromStorage(text.getText().toString()+"/"+isMe+"%"+formattedDate+"\n");
// TODO: In Datenbank speichern
ChatMessage message = new ChatMessage(SoapConnectionManager.User.getPersonOid().intValue(), recipientPersonOid, now, text.getText().toString(), false);
databaseHandler.addChatMessage(message);
chatMessage = new ChatMessageFormat(text.getText().toString(), isMe, formattedDate);
chatMessages.add(chatMessage);
chatMessages.add(message);
adapter.notifyDataSetChanged();
text.setText("");
@@ -272,16 +275,27 @@ public class ChatActivity extends ActionBarActivity{
chatPacket = new Packet(total.toString());
if(!chatPacket.ChatDataIdentifier.equals(DataIdentifier.MESSAGE)) {
continue;
}
Log.i("CHAT_ACTIVITY", "Erhaltene Nachricht: " + chatPacket.ChatMessage);
listV.post(new Runnable() {
@Override
public void run() {
WriteMessagesfromStorage(chatPacket.ChatMessage + "/" + false + "%" + chatPacket.getFormattedMessageTimeStamp() + "\n");
// TODO: Nachricht in Datenbank speichern
Calendar c = Calendar.getInstance();
Date now = c.getTime();
ChatMessage message = new ChatMessage(SoapConnectionManager.User.getPersonOid().intValue(), recipientPersonOid, now, chatPacket.ChatMessage, false);
databaseHandler.addChatMessage(message);
chatMessage = new ChatMessageFormat(chatPacket.ChatMessage, false, chatPacket.getFormattedMessageTimeStamp());
chatMessages.add(chatMessage);
chatMessages.add(message);
adapter.notifyDataSetChanged();
}
});
@@ -298,9 +312,9 @@ public class ChatActivity extends ActionBarActivity{
}
public void SaveAfterLoseConnection(String UnsendMessage){
CreateCustomFileForUnSendMessage();
CreateCustomFileForUnsentMessage();
try{
FileOutputStream stream = new FileOutputStream(Unsendfile,true);
FileOutputStream stream = new FileOutputStream(UnsentFile,true);
try{
stream.write(UnsendMessage.getBytes());
@@ -314,9 +328,9 @@ public class ChatActivity extends ActionBarActivity{
public void SendAfterGetConnection(){
//ist eine UnsendMessage File vorhanden
if(Unsendfile != null && socket.isConnected()){
if(UnsentFile != null && socket.isConnected()){
try{
FileInputStream stream = new FileInputStream(Unsendfile);
FileInputStream stream = new FileInputStream(UnsentFile);
InputStreamReader in = new InputStreamReader(stream);
BufferedReader readLn = new BufferedReader(in);
@@ -336,13 +350,13 @@ public class ChatActivity extends ActionBarActivity{
final String datetime = ArtDate[1];
//für jede Gelesene Line Sende Nachricht
new Thread(new SendUnsendMS(message)).start();
new Thread(new SendUnsentMessage(message)).start();
}
line = readLn.readLine();
}
stream.close();
in.close();
Unsendfile.delete();
UnsentFile.delete();
}catch(Exception fe){
Log.v("Status","Ein problem ist im BEreich Unsend Ms Aufgetreten");
}
@@ -350,11 +364,11 @@ public class ChatActivity extends ActionBarActivity{
}
}
public class SendUnsendMS implements Runnable{
public class SendUnsentMessage implements Runnable{
String al;
SendUnsendMS(String unMS){
SendUnsentMessage(String unMS){
this.al = unMS;
}
@@ -370,12 +384,12 @@ public class ChatActivity extends ActionBarActivity{
socketOutputStream.flush();
}
}catch(Exception xs){
Log.e("SendUnsentMessage", xs.getMessage());
}
}
}
public void CreateCustomFileForUnSendMessage(){
public void CreateCustomFileForUnsentMessage(){
try{
File pfad = getBaseContext().getFilesDir();
@@ -383,7 +397,7 @@ public class ChatActivity extends ActionBarActivity{
//File pfad = getBaseContext().getExternalFilesDir(null);
//Erstelle das File Objekt
Unsendfile = new File(pfad,name+"_Unsend"+".txt");
UnsentFile = new File(pfad,recipientName+"_Unsend"+".txt");
}catch(Exception e){
Log.v("Fehler"," Das erstellen/öffnen einer Datei ist Derzeit nicht möglich");
@@ -434,62 +448,7 @@ public class ChatActivity extends ActionBarActivity{
mNotifyMgr.notify(1, mBuilder.build());
}
public void onResume() {
SharedPreferences sp = getSharedPreferences(Util.PREFS_NAME, 0);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean("IsInChatActivity", true);
editor.commit();
super.onResume();
}
public void onStop(){
// Thread t = new Thread(new ConnectionClose());
// t.start();
SharedPreferences sp = getSharedPreferences(Util.PREFS_NAME, 0);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean("IsInChatActivity", false);
editor.commit();
super.onStop();
}
public void onDestroy(){
// Thread t = new Thread(new ConnectionClose());
// t.start();
// currentlisten = null;
SharedPreferences sp = getSharedPreferences(Util.PREFS_NAME, 0);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean("IsInChatActivity", false);
editor.commit();
super.onDestroy();
}
public void CreateFile(){
try{
File pfad = getBaseContext().getFilesDir();
//Für external Save
//File pfad = getBaseContext().getExternalFilesDir(null);
//Erstelle das File Objekt
//file = new File(pfad,name+".txt");
//vorläufig ##### für debug zwecke
file = new File(pfad,"demo"+".txt");
}catch(Exception e){
Log.v("Fehler"," Das erstellen/öffnen einer Datei ist Derzeit nicht möglich");
}
}
//Internal Storage
// Internal Storage
public void WriteMessagesfromStorage(String message){
try{
FileOutputStream stream = new FileOutputStream(file,true);
@@ -510,8 +469,6 @@ public class ChatActivity extends ActionBarActivity{
//Internal storage
public void ReadMessageToStorage(){
try{
// Log.v("Status","Verbindung steht 1");
int lenght = (int) file.length();
byte[] bytes = new byte[lenght];
@@ -525,33 +482,27 @@ public class ChatActivity extends ActionBarActivity{
BufferedReader readLn = new BufferedReader(in);
String line = readLn.readLine();
String allLines="";
String allLines = "";
//Build a readLine konstrukt
while (line != null) {
allLines += line;
//Funktion für das korrekte anzeigen der Geladenen Nachrichten hier implementieren
//---> <---//
//String[] splitt = line.split("/");
// Log.v("Status",line);
String[] splitt = line.split("/");
if(splitt.length >1 ) {
if(splitt.length > 1) {
String[] ArtDate = splitt[1].split("%"); //<------------ im code sind als seperator ? gesetzt // lösung einfach alle löschen und neuen chat speichern !!
final String message = splitt[0];
final boolean art = Boolean.valueOf(ArtDate[0]);
final String datetime = ArtDate[1];
Log.i("NACHRICHT AUS DATEI", splitt[0]);
listView.post(new Runnable() {
@Override
public void run() {
chatMessage = new ChatMessageFormat(message, art, datetime);
chatMessages.add(chatMessage);
//chatMessages.add(message);
adapter.notifyDataSetChanged();
}
});
@@ -562,9 +513,6 @@ public class ChatActivity extends ActionBarActivity{
stream.close();
in.close();
// Log.v("Local Storage",allLines);
}catch(Exception e){
Log.v("Fehler 2 ",e.getMessage());
e.printStackTrace();