android - Sending and Recieving Messages using Parse -


i have problem sending , receiving messages using parse. app runs sent message doesn't other users, , message not saved in parse. username not written on top of activity chat.

this chat class:

package com.example.veto_uwk.chatapp;  import java.util.arraylist; import java.util.date; import java.util.list;  import android.content.context; import android.content.intent; import android.os.bundle; import android.os.handler; import android.provider.syncstatecontract; import android.text.inputtype; import android.text.format.dateutils; import android.view.menuitem; import android.view.view; import android.view.viewgroup; import android.view.inputmethod.inputmethodmanager; import android.widget.abslistview; import android.widget.baseadapter; import android.widget.edittext;  import android.widget.listview; import android.widget.textview;   import com.example.veto_uwk.chatapp.customactivity;  import com.example.veto_uwk.chatapp.userlist; import com.parse.findcallback;   import com.parse.parseanalytics; import com.parse.parseexception; import com.parse.parseobject; import com.parse.parsequery;    import com.parse.parseuser;       import com.parse.savecallback;  import com.example.veto_uwk.chatapp.r;   import com.example.veto_uwk.chatapp.customactivity;    import com.example.veto_uwk.chatapp.conversation;    public class chat extends customactivity  {  public static parseuser username;  /** conversation list. */ private arraylist<conversation> convlist;  /** chat adapter. */ private chatadapter adp;  /** editext compose message. */ private edittext txt;  /** user name of buddy. */ private string buddy;  /** date of last message in conversation. */ private date lastmsgdate;  /** flag hold if activity running or not. */ private boolean isrunning;  /** handler. */ private static handler handler;  /* (non-javadoc)  * @see android.support.v4.app.fragmentactivity#oncreate(android.os.bundle)  */ @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.chat);      parseanalytics.trackappopened(getintent());      convlist = new arraylist<conversation>();     listview list = (listview) findviewbyid(r.id.list);     adp = new chatadapter();     list.setadapter(adp);     list.settranscriptmode(abslistview.transcript_mode_always_scroll);     list.setstackfrombottom(true);      txt = (edittext) findviewbyid(r.id.txt);     txt.setinputtype(inputtype.type_class_text             | inputtype.type_text_flag_multi_line);      settouchnclick(r.id.buttonsend);       buddy = getintent().getstringextra("name");   /*  getactionbar().settitle(buddy);*/        handler = new handler(); }  /* (non-javadoc)  * @see android.support.v4.app.fragmentactivity#onresume()  */ @override protected void onresume() {     super.onresume();     isrunning = true;     loadconversationlist(); }  /* (non-javadoc)  * @see android.support.v4.app.fragmentactivity#onpause()  */ @override protected void onpause() {     super.onpause();     isrunning = false; }  /* (non-javadoc)  * @see com.socialshare.custom.customfragment#onclick(android.view.view)  */ @override public void onclick(view v) {     super.onclick(v);     if (v.getid() == r.id.buttonsend)     {         sendmessage();     }  }  /**  * call method send message opponent. nothing if text  * empty otherwise creates parse object chat message , send  * parse server.  */ private void sendmessage() {     if (txt.length() == 0)         return;      inputmethodmanager imm = (inputmethodmanager) getsystemservice(context.input_method_service);     imm.hidesoftinputfromwindow(txt.getwindowtoken(), 0);      string s = txt.gettext().tostring();     final conversation c = new conversation(s, new date(),             userlist.user.getusername());     c.setstatus(conversation.status_sending);     convlist.add(c);     adp.notifydatasetchanged();     txt.settext(null);      parseobject po = new parseobject("chat");     po.put("sender", userlist.user.getusername());     po.put("receiver", buddy);     po.put("createdat", "");     po.put("message", s);     po.saveeventually(new savecallback() {          @override         public void done(parseexception e)         {             if (e == null)                 c.setstatus(conversation.status_sent);             else                 c.setstatus(conversation.status_failed);             adp.notifydatasetchanged();         }     }); }  /**  * load conversation list parse server , save date of last  * message used load recent new messages  */ private void loadconversationlist() {     parsequery<parseobject> q = parsequery.getquery("chat");     if (convlist.size() == 0)     {         // load messages...         arraylist<string> al = new arraylist<string>();         al.add(buddy);         al.add(userlist.user.getusername());         q.wherecontainedin("sender", al);         q.wherecontainedin("receiver", al);     }     else     {         // load newly received message..         if (lastmsgdate != null)             q.wheregreaterthan("createdat", lastmsgdate);         q.whereequalto("sender", buddy);         q.whereequalto("receiver", userlist.user.getusername());     }     q.orderbydescending("createdat");     q.setlimit(30);     q.findinbackground(new findcallback<parseobject>() {          @override         public void done(list<parseobject> li, parseexception e)         {             if (li != null && li.size() > 0)             {                 (int = li.size() - 1; >= 0; i--)                 {                     parseobject po = li.get(i);                     conversation c = new conversation(po                             .getstring("message"), po.getcreatedat(), po                             .getstring("sender"));                     convlist.add(c);                     if (lastmsgdate == null                             || lastmsgdate.before(c.getdate()))                         lastmsgdate = c.getdate();                     adp.notifydatasetchanged();                 }             }             handler.postdelayed(new runnable() {                  public void run()                 {                     if (isrunning)                         loadconversationlist();                 }             }, 1000);         }     });  }  /**  * class chatadapter adapter class chat listview.  * adapter shows sent or receieved chat message in each list item.  */ private class chatadapter extends baseadapter {      /* (non-javadoc)      * @see android.widget.adapter#getcount()      */     public int getcount()     {         return convlist.size();     }      /* (non-javadoc)      * @see android.widget.adapter#getitem(int)      */     public conversation getitem(int arg0)     {         return convlist.get(arg0);     }      /* (non-javadoc)      * @see android.widget.adapter#getitemid(int)      */     public long getitemid(int arg0)     {         return arg0;     }      /* (non-javadoc)      * @see android.widget.adapter#getview(int, android.view.view, android.view.viewgroup)      */     public view getview(int pos, view v, viewgroup arg2)     {         conversation c = getitem(pos);         if (c.issent())             v = getlayoutinflater().inflate(r.layout.chat_item_sent, null);         else             v = getlayoutinflater().inflate(r.layout.chat_item_rcv, null);          textview lbl = (textview) v.findviewbyid(r.id.lbl2);         lbl.settext(dateutils.getrelativedatetimestring(chat.this, c                         .getdate().gettime(), dateutils.second_in_millis,                 dateutils.day_in_millis, 0));          lbl = (textview) v.findviewbyid(r.id.lbl1);         lbl.settext(c.getmsg());          if (c.issent())         {             if (c.getstatus() == conversation.status_sent)                 lbl.settext("delivered");             else if (c.getstatus() == conversation.status_sending)                 lbl.settext("sending...");             else                 lbl.settext("failed");         }         else             lbl.settext("");          return v;     }  }  /* (non-javadoc)  * @see android.app.activity#onoptionsitemselected(android.view.menuitem)  */ @override public boolean onoptionsitemselected(menuitem item) {     if (item.getitemid() == android.r.id.home)     {         finish();     }     return super.onoptionsitemselected(item); } } 

this conversation class:

 package com.example.veto_uwk.chatapp;   import java.util.date;   public class conversation { public static final int status_sending =0; public static final int status_sent =1; public static final int status_failed = 2; private string  msg; private int status = status_sent; private date date; private string sender;  public conversation(string msg ,date date ,string sender) {     this.msg=msg;     this.date=date;     this.sender =sender; } public conversation() {  } public string getmsg() {     return msg; } public void setmsg(string msg) {     this.msg = msg; } public boolean issent() {     return userlist.user.getusername().equals(sender); } public date getdate() {     return date; } public void setdate(date date){     this.date =date; } public string getsender() {     return sender; } public void setsender(string sender) {     this.sender=sender; } public int getstatus() {     return status; } public void setstatus(int status) {     this.status = status; } } 

it's better use sinch library along parse sending & recieving messages. article helped me lot: https://www.sinch.com/tutorials/android-messaging-tutorial-using-sinch-and-parse/ in article have link test app can download , play around. have fun :)


Comments