Autore Topic: Mi servirebbe un aiuto per capire come funziona questa app per instant messaging  (Letto 623 volte)

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Salve, non poco tempo fa ho trovato in rete questo progetto https://github.com/Pirngruber/AndroidIM in cui viene creata una instant chat come ad es. whatsapp... la cosa mi ha incurosito molto e anche se con un po' di difficoltà nel capire il codice sono riuscito a farla funzionare..il problema è che quando invio due messaggi velocemente l'altra app client in esecuzione mi riceve due volte il primo messaggio  :-o... il che è strano perchè nelle tabelle del server mysql i due messaggi sono stati caricati correttamente qualcuno potrebbe per favore illuminarmi  :-) ormai sono giorni che provo ma non trovo una soluzione  :-(
Grazie.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Mi servirebbe un aiuto per capire come funziona questa app per instant messaging
« Risposta #1 il: 01 Settembre 2013, 15:42:37 CEST »
0
Senza nessuna visibilità sul tuo progetto è difficile dirti dove sta l'errore.

Però ti posso dire cosa farei. Prima cosa verificare nell'app ricevente come viene ricevuto il messaggio (non come viene visualizzato), e per fare questo o usi il LogCat (se lavori con eclipse+ emulatore) oppure fai una speciale versione dell'app ricevente che salva su un file TXT nella SD il log a basso livello dei messaggi ricevuti. Dal lato server potresti fare una cosa analoga, monitorando i messaggi che vengono spediti all'app ricevente.

Lo scopo è individuare il punto in cui si genera la tua anomalia (duplicazione del messaggio) restringendo sempre di più l'area (se vedi che il server spedisce correttamente, allora il problema è dopo, altrimenti se spedisce male il problema è tra la tabella mysql e la spedizione).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Re:Mi servirebbe un aiuto per capire come funziona questa app per instant messaging
« Risposta #2 il: 01 Settembre 2013, 16:02:43 CEST »
0
Inanzitutto Grazie per avermi risposto così velocemente
Cotrollando il logcat il secondo client riceve effettivamente i due messaggi separati quindi è da escludere il problema tra client e server ... il problema è quindi dell'app..

questo è il message receiver

Codice (Java): [Seleziona]
        public class  MessageReceiver extends BroadcastReceiver {

                @Override
                public void onReceive(Context context, Intent intent)
                {              
                        Bundle extra = intent.getExtras();
                        String username = extra.getString(MessageInfo.USERID);                 
                        String message = extra.getString(MessageInfo.MESSAGETEXT);
                       
                        if (username != null && message != null)
                        {
                                if (friend.userName.equals(username)) {
                                        appendToMessageHistory(username, message);
                                        localstoragehandler.insert(username,imService.getUsername(), message);
                                        Log.i(tag, message);
                                }
                                else {
                                        if (message.length() > 15) {
                                                message = message.substring(0, 15);
                                        }
                                        Toast.makeText(Messaging.this,  username + " says '"+
                                                                                                        message + "'",
                                                                                                        Toast.LENGTH_SHORT).show();            
                                }
                        }                      
                }
               
        };
        private MessageReceiver messageReceiver = new MessageReceiver();

E questo è il modo il cui lo inserisco nella listview che dovrebbe visulizzare i messaggi
Codice (Java): [Seleziona]
        public  void appendToMessageHistory(String username, String message) {
                if (username != null && message != null) {
                       
                        listItems.add(username + ":\n" + message);
                        adapter.notifyDataSetChanged();
                        scrollMyListViewToBottom();
                }
        }

Questo è il logcat che mi dice di aver ricevuto il messaggio contenente "b" e un altro messaggio contenente "bc" ma nella listview mi escono due voce uguali ovvero "b" e "b"

09-01 13:55:13.856: I/MessageLOG(330): user12013-09-01 15:55:00b
09-01 13:55:13.856: I/MessageLOG(330): user12013-09-01 15:55:00bc
09-01 13:55:13.856: I/MessageLOG(330): i=0
09-01 13:55:13.856: I/MessageLOG(330): i=1
09-01 13:55:13.957: D/LocalStorageHandler(330): insert(): rowId=82
09-01 13:55:14.005: D/LocalStorageHandler(330): insert(): rowId=83
« Ultima modifica: 01 Settembre 2013, 16:04:19 CEST da login »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Mi servirebbe un aiuto per capire come funziona questa app per instant messaging
« Risposta #3 il: 01 Settembre 2013, 16:27:45 CEST »
0
Non vedo problemi evidenti nel codice.

Prova a loggare i messaggi da dentro la appendToMessageHistory.

E prova anche a commentare (se puoi) localstoragehandler.insert(...) nel caso in cui sia in quello che si generano problemi di concurrency.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Re:Mi servirebbe un aiuto per capire come funziona questa app per instant messaging
« Risposta #4 il: 01 Settembre 2013, 16:35:18 CEST »
0
Allora ho commentato localstoragehandler.insert(...) ma lo stesso duplica il messaggio.... ho provato a loggare altre parti di codice come appendToMessageHistory  e il logcat mi restituisce questo:

09-01 14:30:59.165: I/MessageLOG(483): user12013-09-01 16:30:00a //Primo messaggio
09-01 14:30:59.165: I/MessageLOG(483): user12013-09-01 16:30:00ab //secondo messaggio
09-01 14:30:59.165: I/MessageLOG(483): i=0
09-01 14:30:59.165: I/MessageLOG(483): i=1
09-01 14:30:59.177: I/MessageHistory(483): a
09-01 14:30:59.177: I/Messaging(483): a
09-01 14:30:59.247: D/LocalStorageHandler(483): insert(): rowId=100
09-01 14:30:59.247: I/localstorage(483): android.database.sqlite.SQLiteCursor@405a6bc8
09-01 14:30:59.305: I/MessageHistory(483): a
09-01 14:30:59.305: I/Messaging(483): a


Da quanto posso vedere è come se ignora completamente il secondo messaggio una volta che è arrivato... :-(
« Ultima modifica: 01 Settembre 2013, 16:47:02 CEST da login »