java - android google firebase upload photo with login situation -
i learning use google firebase android apps , know how build database , let user write new post,(but words only).
on other hand,i know how post photo without situation of user login.
if want post photo user login situation,the apps run wrong....
i don't know what's wrong in it.....
thanks lots kindly help!
if(!textutils.isempty(title) && !textutils.isempty(body) && imageuri != null){ progressdialog.show(); storagereference filepath = storagereference.child("blog_images").child(imageuri.getlastpathsegment()); filepath.putfile(imageuri).addonsuccesslistener(new onsuccesslistener<uploadtask.tasksnapshot>() { @override public void onsuccess(uploadtask.tasksnapshot tasksnapshot) { uri downloadurl = tasksnapshot.getdownloadurl(); databasereference post = mdatabase.push(); post.child("image").setvalue(downloadurl.tostring()); progressdialog.dismiss(); // startactivity(new intent(newpostactivity.this,mainactivity.class)); } }); } // disable button there no multi-posts seteditingenabled(false); toast.maketext(this, "正在為您刊登中...", toast.length_short).show(); // [start single_value_read] final string userid = getuid(); mdatabase.child("users").child(userid).addlistenerforsinglevalueevent( new valueeventlistener() { @override public void ondatachange(datasnapshot datasnapshot) { // user value user user = datasnapshot.getvalue(user.class); // [start_exclude] if (user == null) { // user null, error out log.e(tag, "user " + userid + " unexpectedly null"); toast.maketext(newpostactivity.this, "error: not fetch user.", toast.length_short).show(); } else { // write new post writenewpost(userid, user.username,date, title, body, money, time, special); } and there full code below:
package com.google.firebase.quickstart.database; import android.app.progressdialog; import android.content.intent; import android.graphics.bitmap; import android.net.uri; import android.os.bundle; import android.provider.mediastore; import android.support.design.widget.floatingactionbutton; import android.text.textutils; import android.util.log; import android.view.view; import android.widget.button; import android.widget.imageview; import android.widget.textview; import android.widget.toast; import com.google.android.gms.tasks.onsuccesslistener; import com.google.firebase.database.datasnapshot; import com.google.firebase.database.databaseerror; import com.google.firebase.database.databasereference; import com.google.firebase.database.firebasedatabase; import com.google.firebase.database.valueeventlistener; import com.google.firebase.quickstart.database.models.post; import com.google.firebase.quickstart.database.models.user; import com.google.firebase.storage.firebasestorage; import com.google.firebase.storage.storagereference; import com.google.firebase.storage.uploadtask; import java.io.ioexception; import java.util.calendar; import java.util.hashmap; import java.util.map; public class newpostactivity extends baseactivity { private static final string tag = "newpostactivity"; private static final string required = "required"; private static final int pick_image_request = 234; // [start declare_database_ref] private databasereference mdatabase; private storagereference riversref; private storagereference storagereference; // [end declare_database_ref] //imageview private imageview imageview; //a uri object store file path private uri imageuri=null; private uri filepath; private textview mdate; private textview mtitlefield; private textview mbodyfield; private textview mplace; private textview mchild; private textview mforms; private textview meng; private textview mmoney; private textview mtime; private textview mspecial; private progressdialog progressdialog; private floatingactionbutton msubmitbutton; private button mbutton; private button mbutton2; private int yy; private int mm; private int dd; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_new_post); // [start initialize_database_ref] mdatabase = firebasedatabase.getinstance().getreference(); // [end initialize_database_ref] storagereference = firebasestorage.getinstance().getreference(); //更改(2) mdate = (textview) findviewbyid(r.id.post_date); mtitlefield = (textview) findviewbyid(r.id.field_title); mbodyfield = (textview) findviewbyid(r.id.field_body); mmoney = (textview) findviewbyid(r.id.input_money); mtime = (textview) findviewbyid(r.id.input_time); mspecial = (textview) findviewbyid(r.id.input_special); imageview = (imageview) findviewbyid(r.id.upload); mbutton = (button) findviewbyid(r.id.button_camera); mbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { upload(); } }); mbutton2 = (button) findviewbyid(r.id.button_download); mbutton2.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { upload(); } }); msubmitbutton = (floatingactionbutton) findviewbyid(r.id.fab_submit_post); msubmitbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { submitpost(); } }); } private void upload() { intent intent = new intent(); intent.settype("image/*"); intent.setaction(intent.action_get_content); startactivityforresult(intent.createchooser(intent, "select picture"), pick_image_request); } //handling image chooser activity result @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if (requestcode == pick_image_request && resultcode == result_ok && data != null && data.getdata() != null) { imageuri = data.getdata(); try { bitmap bitmap = mediastore.images.media.getbitmap(getcontentresolver(), imageuri); imageview.setimagebitmap(bitmap); } catch (ioexception e) { e.printstacktrace(); } } } private void submitpost() { //更改(1) final calendar c = calendar.getinstance(); yy = c.get(calendar.year); mm = c.get(calendar.month); dd = c.get(calendar.day_of_month); mdate.settext(new stringbuilder() // month 0 based, add 1 .append(yy).append(" ").append("-").append(mm + 1).append("-") .append(dd)); final string date = mdate.gettext().tostring(); final string title = mtitlefield.gettext().tostring(); final string body = mbodyfield.gettext().tostring(); final string money = mmoney.gettext().tostring(); final string time = mtime.gettext().tostring(); final string special = mspecial.gettext().tostring(); // title required if (textutils.isempty(title)) { mtitlefield.seterror(required); return; } // body required if (textutils.isempty(body)) { mbodyfield.seterror(required); return; } if (textutils.isempty(money)) { mmoney.seterror(required); return; } if (textutils.isempty(time)) { mtime.seterror(required); return; } if (textutils.isempty(special)) { mspecial.seterror(required); return; } if(!textutils.isempty(title) && !textutils.isempty(body) && imageuri != null){ progressdialog.show(); storagereference filepath = storagereference.child("blog_images").child(imageuri.getlastpathsegment()); filepath.putfile(imageuri).addonsuccesslistener(new onsuccesslistener<uploadtask.tasksnapshot>() { @override public void onsuccess(uploadtask.tasksnapshot tasksnapshot) { uri downloadurl = tasksnapshot.getdownloadurl(); databasereference post = mdatabase.push(); post.child("image").setvalue(downloadurl.tostring()); progressdialog.dismiss(); // startactivity(new intent(newpostactivity.this,mainactivity.class)); } }); } // disable button there no multi-posts seteditingenabled(false); toast.maketext(this, "正在為您刊登中...", toast.length_short).show(); // [start single_value_read] final string userid = getuid(); mdatabase.child("users").child(userid).addlistenerforsinglevalueevent( new valueeventlistener() { @override public void ondatachange(datasnapshot datasnapshot) { // user value user user = datasnapshot.getvalue(user.class); // [start_exclude] if (user == null) { // user null, error out log.e(tag, "user " + userid + " unexpectedly null"); toast.maketext(newpostactivity.this, "error: not fetch user.", toast.length_short).show(); } else { // write new post writenewpost(userid, user.username,date, title, body, money, time, special); } // finish activity, stream seteditingenabled(true); finish(); // [end_exclude] } @override public void oncancelled(databaseerror databaseerror) { log.w(tag, "getuser:oncancelled", databaseerror.toexception()); // [start_exclude] seteditingenabled(true); // [end_exclude] } }); // [end single_value_read] } private void seteditingenabled(boolean enabled) { mtitlefield.setenabled(enabled); mbodyfield.setenabled(enabled); if (enabled) { msubmitbutton.setvisibility(view.visible); } else { msubmitbutton.setvisibility(view.gone); } } // [start write_fan_out] private void writenewpost(string userid, string username, string date, string title, string body, string money, string time, string special) { // create new post @ /user-posts/$userid/$postid , @ // /posts/$postid simultaneously string key = mdatabase.child("posts").push().getkey(); post post = new post(userid, username, date, title, body, money, time, special); //受到post.java的參數所影響 map<string, object> postvalues = post.tomap(); map<string, object> childupdates = new hashmap<>(); childupdates.put("/posts/" + key, postvalues); childupdates.put("/user-posts/" + userid + "/" + key, postvalues); mdatabase.updatechildren(childupdates); } // [end write_fan_out] }
Comments
Post a Comment