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
Post a Comment