object - Android Parse.com android allow to get data from table but not for update -
package symca.gescoe.com.sampleparseapp.payment_task; import android.app.alertdialog; import android.app.dialog; import android.app.progressdialog; import android.content.context; import android.content.dialoginterface; import android.graphics.color; import android.graphics.porterduff; import android.os.bundle; import android.text.inputtype; import android.util.log; import android.view.gravity; import android.view.layoutinflater; import android.view.menu; import symca.gescoe.com.sampleparseapp.r; import android.app.activity; import android.view.view; import android.view.view.onclicklistener; import android.view.windowmanager; import android.widget.button; import android.widget.edittext; import android.widget.imageview; import android.widget.linearlayout; import android.widget.relativelayout; import android.widget.textview; import android.widget.toast; import com.parse.findcallback; import com.parse.getcallback; import com.parse.parseacl; import com.parse.parseexception; import com.parse.parseobject; import com.parse.parsequery; import com.parse.parseuser; import com.parse.savecallback; import java.util.list; public class payrent extends activity { textview ownername, owneremail, ownerproptype, ownerlocation, owneraccountno, renteraccountno; edittext propid; int confirmflag = 0; int rentfinal = 0, mainfinal = 0, totalfinal = 0; int rent; int maintenance; string ownernamestr; string owneremailstr; string ownerproptypestr; string ownerlocationstr; string owneraccountnostr; string renteraccountnostr; string propidstr; button btnpayrent; imageview btnconfirm; int payinterestflag = 1; progressdialog progressdialog; string protype, location, email, fname, lname, owneraccount, renteraccount; string ownerobjid,owneravlbal; int bhk; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_pay_rent); // parseacl defaultacl = new parseacl(); // defaultacl.setpublicwriteaccess(true);//------temp btnconfirm = (imageview) findviewbyid(r.id.btnconfirmidpay); btnpayrent = (button) findviewbyid(r.id.btnpayrent); propid = (edittext) findviewbyid(r.id.tvpropidpay); ownername = (textview) findviewbyid(r.id.tvnamepay); owneremail = (textview) findviewbyid(r.id.tvemailpay); ownerproptype = (textview) findviewbyid(r.id.tvproptypepay); ownerlocation = (textview) findviewbyid(r.id.tvlocpay); owneraccountno = (textview) findviewbyid(r.id.tvlandaccountnopay); renteraccountno = (textview) findviewbyid(r.id.tvrenteraccountnopay); final relativelayout relativelayout = (relativelayout) findviewbyid(r.id.relativelaupropertypay); btnconfirm.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { confirmflag = 1; progressdialog = progressdialog.show(payrent.this, "please wait...", "property details loading.."); string propidstr = propid.gettext().tostring(); if (!propidstr.equals("")) { final parsequery<parseobject> query = parsequery.getquery("postadd"); query.whereequalto("objectid", propidstr); query.getfirstinbackground(new getcallback<parseobject>() { @override public void done(parseobject object, parseexception e) { if (e == null)//-----from post add table-------------- { email = object.getstring("postemail"); bhk = object.getint("bhk"); protype = object.getstring("proptype"); location = object.getstring("location"); rent = object.getint("erent"); maintenance = object.getint("emaintainance"); //-------------from user table------- parsequery query = parseuser.getquery(); query.whereequalto("email", email); query.getfirstinbackground(new getcallback() { @override public void done(parseobject object, parseexception e) { string interest = object.getstring("paymentinterest"); if (interest.equals("interested")) { payinterestflag = 0; fname = object.getstring("firstname"); lname = object.getstring("lastname"); owneraccount = object.getstring("accountno"); renteraccount = parseuser.getcurrentuser().getstring("accountno"); ownername.settext(fname + " " + lname); owneraccountno.settext(owneraccount); renteraccountno.settext(renteraccount); owneremail.settext(email); ownerlocation.settext(location); ownerproptype.settext(bhk + " " + "bhk " + protype); progressdialog.dismiss(); } else { progressdialog.dismiss(); payinterestflag = 1; alertdialog.builder alertpayinterest = new alertdialog.builder(payrent.this); alertpayinterest.settitle("not interested!"); alertpayinterest.seticon(r.drawable.notonline); alertpayinterest.setmessage("ohhh!!!\nselected add owner not interested in online payment"); alertpayinterest.show(); } } }); } else { progressdialog.dismiss(); propid.seterror("property id not valid!!!"); } } }); }//if else { progressdialog.dismiss(); propid.seterror("property id blank"); } } }); //---------------------------------------------------------------------- btnpayrent.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { toast.maketext(getapplicationcontext(), "click rent", toast.length_short).show(); if ((!propid.gettext().tostring().equals("")) && (confirmflag == 1)) { layoutinflater factory = layoutinflater.from(payrent.this); final view textentryview = factory.inflate(r.layout.custom_dialogue_payrent, null); final edittext inputrent = (edittext) textentryview.findviewbyid(r.id.edtrentcustom); inputrent.setenabled(false); final edittext inputmain = (edittext) textentryview.findviewbyid(r.id.edtmaincustom); inputmain.setenabled(false); imageview imgrent = (imageview) textentryview.findviewbyid(r.id.edtimgrentpay); imageview imgmain = (imageview) textentryview.findviewbyid(r.id.edtimgmainpay); // toast.maketext(getapplicationcontext(),"rent "+rent,toast.length_short).show(); inputrent.settext("" + rent); inputmain.settext("" + maintenance); imgrent.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { inputrent.setenabled(true); //inputrent.requestfocus(); } }); imgmain.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { inputmain.setenabled(true); } }); final alertdialog.builder alert = new alertdialog.builder(payrent.this); alert.seticon(r.drawable.donation); alert.settitle("payment details"); alert.setview(textentryview); alert.setpositivebutton("ok", new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int whichbutton) { //-------------positive button rentfinal = integer.parseint(inputrent.gettext().tostring()); mainfinal = integer.parseint(inputmain.gettext().tostring()); totalfinal = rentfinal + mainfinal; //--transaction table------- parseobject objtrans = new parseobject("transactions"); objtrans.put("debtor", renteraccount);//renter objtrans.put("creditor", owneraccount);//owner objtrans.put("totalamt", totalfinal); objtrans.saveinbackground(); //-------------------------------- final parsequery<parseobject> querypradip = parsequery.getquery("pay"); querypradip.whereequalto("accountno", owneraccount); querypradip.getfirstinbackground(new getcallback<parseobject>() { public void done(parseobject object, parseexception e) { if (object == null) { log.d("score", "the getfirst request failed."+e.getmessage()); } else { log.d("score", "retrieved object."); ownerobjid=object.getobjectid(); owneravlbal=object.getstring("availablebal"); log.d("oid", ownerobjid); log.d("obal", owneravlbal); toast.maketext(getapplicationcontext(), "ownerid"+ownerobjid+"\naval bal"+owneravlbal, toast.length_long).show(); //--------------------update-------------- parsequery query = new parsequery("pay"); query.getinbackground(ownerobjid, new getcallback() { public void done(final parseobject object, parseexception e) { if (e == null) { object.put("bal", 5000); object.saveinbackground(); toast.maketext(getapplicationcontext(), "after save in back", toast.length_long).show(); object.saveinbackground(new savecallback() { public void done(parseexception e) { object.put("availablebal", 7000); object.saveinbackground(); } }); } else { e.printstacktrace(); log.e("in update",e.getmessage()); } } }); } } }); //---reter table--------------- parsequery<parseobject> querypay = new parsequery<parseobject>("pay"); querypay.whereequalto("accountno", renteraccount); querypay.getfirstinbackground(new getcallback<parseobject>() { @override public void done(parseobject object, parseexception e) { string availbal = object.getstring("availablebal"); string renterid = object.getobjectid(); final int remainsbal = integer.parseint(availbal) - totalfinal; log.e("renter", "************" + remainsbal); log.e("renterid", "************" + renterid); //----------------update------------------ parsequery queryupdatepay = new parsequery("pay"); queryupdatepay.getinbackground(renterid, new getcallback() { @override public void done(parseobject obj, parseexception e) { if (e == null) { obj.put("availablebal", "" + remainsbal); log.e("update", "************" + remainsbal); obj.saveinbackground(); } else { // error... } } }); }//done }); } });//ok alert.setnegativebutton("cancel", new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int whichbutton) { } } ); alert.show(); } else if (propid.gettext().tostring().equals("")) { propid.seterror("property id blank!"); } if (confirmflag == 0) { toast.maketext(getapplicationcontext(), "please confirm property id before pay", toast.length_short).show(); } } }); }//oncreate }
i able store(simply put using object) data in pay table table when trying update doesn't show change in table.......... same applying current user(renter data) done data,update except current user others users data not update
i not want try , understand such large block of code. in future please try , boil down relevant pieces. however:
- looks query right after saving. note saveinbackground() async, starts (as name suggests) contact parse.com , save in background thread. if query depend on object being saved, need wait complete adding savecallback parameter
saveinbackground(new savecallback)
- if because update fails, again implement savecallback see exception thrown
saveinbackground(new savecallback)
- you should never able update other user objects own. huge security issue. work around create cloud function using
usemasterkey()
, call function app.
Comments
Post a Comment