alertdialog - Custom Alert Dialog with multiple EditText -
alertdialog - Custom Alert Dialog with multiple EditText -
i want build custom alert dialog person can insert new values, address, postal code, city , nation. after sets new values, app update local database. when insert value , click ok button, app crash , homecoming fatal exception error.
xml of endspesa.activity
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <textview android:id="@+id/costo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" android:layout_alignparentleft="true" android:layout_alignparentstart="true" android:layout_marginleft="40dp" android:layout_marginstart="40dp" android:layout_margintop="40dp" android:text="costo articoli: "/> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/costo2" android:layout_torightof="@+id/costo" android:layout_alignbottom="@id/costo" android:layout_marginleft="12dp" /> <textview android:id="@+id/prezzo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbottom="@+id/costo2" android:layout_torightof="@+id/costo2" android:text="€" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iva" android:text="iva: " android:layout_below="@+id/costo" android:layout_alignright="@+id/costo" android:layout_alignend="@+id/costo" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iva2" android:layout_below="@+id/costo2" android:layout_toleftof="@+id/prezzo" android:layout_tostartof="@+id/prezzo" /> <textview android:id="@+id/prezzo4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="€" android:layout_alignbottom="@+id/iva2" android:layout_torightof="@+id/iva2" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/spedizione" android:text="costo di spedizione: " android:layout_below="@+id/iva" android:layout_alignright="@+id/iva" android:layout_alignend="@+id/iva" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/spedizione2" android:layout_below="@+id/iva2" android:layout_toleftof="@+id/prezzo" android:layout_tostartof="@+id/prezzo" /> <textview android:id="@+id/prezzo2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbottom="@+id/spedizione2" android:layout_torightof="@+id/spedizione2" android:text="€" /> <view android:id="@+id/edittext3" android:layout_below="@+id/spedizione" android:layout_width="fill_parent" android:layout_height="1dp" android:background="#ff000000" android:layout_marginbottom="2dip" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/totale" android:text="totale: " android:layout_below="@+id/edittext3" android:layout_alignright="@+id/spedizione" android:layout_alignend="@+id/spedizione" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/totale2" android:layout_toleftof="@+id/prezzo" android:layout_tostartof="@+id/prezzo" android:layout_alignbottom="@+id/totale" /> <textview android:id="@+id/prezzo3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbottom="@+id/totale2" android:layout_torightof="@+id/totale2" android:text="€" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="la spedizione sarà al seguente indirizzo:" android:id="@+id/text_spedizione" android:layout_below="@+id/totale" android:layout_alignleft="@+id/costo" android:layout_alignstart="@+id/costo" android:layout_margintop="38dp" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/indirizzo" android:layout_below="@+id/text_spedizione" android:layout_alignleft="@+id/text_spedizione" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/cap" android:layout_below="@id/indirizzo" android:layout_alignleft="@id/indirizzo" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/citta" android:layout_below="@id/cap" android:layout_alignleft="@id/cap" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/nazione" android:layout_below="@+id/citta" android:layout_alignleft="@+id/citta" /> <button android:id="@+id/okbutton" android:layout_width="96dp" android:layout_height="wrap_content" android:text="@string/okbutton" android:background="#fdfff6" android:layout_alignparentbottom="true" android:layout_alignparentleft="true" android:layout_alignparentstart="true" android:layout_marginbottom="13dip" android:layout_alignright="@+id/prezzo3" android:layout_alignend="@+id/prezzo3" /> <button android:id="@+id/cambia" android:layout_width="96dp" android:layout_height="wrap_content" android:text="cambia indirizzo" android:background="#fdfff6" android:layout_alignparentbottom="true" android:layout_alignparentright="true" android:layout_alignparentend="true" android:layout_aligntop="@+id/login" android:layout_marginbottom="13dip" android:layout_torightof="@+id/login" android:layout_toendof="@+id/login" /> </relativelayout>
xml of custom alert dialog
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- indirizzo --> <edittext android:inputtype="text" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/address_edit" android:background="#efffc2" android:hint="@string/address" android:textcolor="#000000" android:textsize="20sp" android:padding="3dip" android:layout_marginbottom="5dip"/> <!-- città --> <edittext android:layout_below="@+id/address_edit" android:inputtype="text" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/city_edit" android:background="#efffc2" android:hint="@string/city" android:textcolor="#000000" android:textsize="20sp" android:padding="3dip" android:layout_marginbottom="5dip"/> <!-- cap --> <edittext android:layout_below="@+id/city_edit" android:inputtype="number" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/cap_edit" android:background="#efffc2" android:hint="@string/cap" android:textcolor="#000000" android:textsize="20sp" android:padding="3dip" android:layout_marginbottom="5dip"/> <!-- nazione --> <edittext android:layout_below="@+id/cap_edit" android:inputtype="text" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/nazione_edit" android:background="#efffc2" android:hint="@string/nazione" android:textcolor="#000000" android:textsize="20sp" android:padding="3dip" android:layout_marginbottom="5dip"/> </relativelayout>
here activity
package com.example.spinoshop; import android.app.activity; import android.app.alertdialog; import android.app.dialog; import android.content.dialoginterface; import android.database.cursor; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; import com.example.spinoshop.model.logindatabaseadapter; public class endspesa extends activity { logindatabaseadapter dbprod; @override protected void oncreate(bundle savedinstancesaved){ super.oncreate(savedinstancesaved); setcontentview(r.layout.end_spesa); // richiamo la classe e ne prendo il valore final globalspesa globalvariable = (globalspesa) getapplicationcontext(); final string tabella_spesa = globalvariable.gettab(); int id_ut_l = globalvariable.getid_utente(); final string id_ut= string.valueof(id_ut_l); int spedizione = 20; // imposto subito il massimo della spedizione // mostro il conto int prezzo; int quantita; dbprod = new logindatabaseadapter(this); dbprod = dbprod.open(); cursor cursor_carrello = dbprod.db.rawquery("select sum(prezzo),sum(quantita) '" + tabella_spesa + "'", null); //mostro l'indirizzo cursor cursor_indirizzo = dbprod.db.rawquery("select indirizzo,cap,citta,nazione utenti id_u ="+id_ut+"", null); cursor_indirizzo.movetofirst(); string indirizzo = cursor_indirizzo.getstring(0); string cap = new string(cursor_indirizzo.getstring(1)); string citta = new string(cursor_indirizzo.getstring(2)); string nazione = new string(cursor_indirizzo.getstring(3)); string[] europa = new string[]{"francia","spagna","germania","grecia","olanda"}; string[] mondo = new string[]{"afghanistan","cina","giappone"}; // controllo dei costi di spedizione (int = 0; < europa.length; ++i) { if(nazione.equals(europa[i])){ spedizione = 10; }; if (nazione.equals("italia") || nazione.equals("italia")){ spedizione = 5; } } if(cursor_carrello.movetofirst()){ prezzo = cursor_carrello.getint(0); quantita = cursor_carrello.getint(1); }else{ prezzo = -1; quantita = -1; } cursor_carrello.close(); int costo = prezzo*quantita; textview costo = (textview) findviewbyid(r.id.costo2); costo.settext(string.valueof(costo)); int iva = (costo*20)/100; textview iva = (textview) findviewbyid(r.id.iva2); iva.settext(string.valueof(iva)); textview spese_spedizione = (textview) findviewbyid(r.id.spedizione2); spese_spedizione.settext(string.valueof(spedizione)); int totale = costo+iva+spedizione; textview totale = (textview) findviewbyid(r.id.totale2); totale.settext(string.valueof(totale)); textview indirizzo = (textview) findviewbyid(r.id.indirizzo); indirizzo.settext(indirizzo); textview cap = (textview) findviewbyid(r.id.cap); cap.settext(cap); textview citta = (textview) findviewbyid(r.id.citta); citta.settext(citta); textview nazione = (textview) findviewbyid(r.id.nazione); nazione.settext(nazione); // cambio indirizzo final button cambia_indirizzo = (button)findviewbyid(r.id.cambia); cambia_indirizzo.setonclicklistener(new view.onclicklistener() { @override public void onclick(view arg0) { alertdialog.builder cambio = new alertdialog.builder(endspesa.this); layoutinflater layoutinflater = endspesa.this.getlayoutinflater(); view cambioview = layoutinflater.inflate(r.layout.cambia_indirizzo_dialog, null); cambio.setview(cambioview); final edittext edittextuserindirizzo = (edittext) findviewbyid(r.id.address_edit); final edittext edittextusercitta = (edittext) findviewbyid(r.id.city_edit); final edittext edittextusercap = (edittext) findviewbyid(r.id.cap_edit); final edittext edittextusernazione = (edittext) findviewbyid(r.id.nazione_edit); cambio.setpositivebutton("ok", new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int id) { string userindirizzo = edittextuserindirizzo.gettext().tostring(); string usercitta = edittextusercitta.gettext().tostring(); string usercap = edittextusercap.gettext().tostring(); string usernazione = edittextusernazione.gettext().tostring(); dbprod.db.rawquery("update utenti set indirizzo="+userindirizzo+", " + "citta="+usercitta+", cap="+usercap+", nazione="+usernazione+" [where id_u ="+id_ut+"]",null); } }); // setto il bottone negativo cambio.setnegativebutton("cancel",new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int id) { dialog.cancel(); } }); // creo l'alert dialog alertdialog alert = cambio.create(); alert.show(); } }); } }
here log
04-09 06:19:29.724 3739-3739/com.example.spinoshop e/androidruntime﹕ fatal exception: main process: com.example.spinoshop, pid: 3739 java.lang.nullpointerexception @ com.example.spinoshop.endspesa$1$1.onclick(endspesa.java:130) @ com.android.internal.app.alertcontroller$buttonhandler.handlemessage(alertcontroller.java:166) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:136) @ android.app.activitythread.main(activitythread.java:5017) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:515) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:779) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:595) @ dalvik.system.nativestart.main(native method)
i replace
public void onclick(dialoginterface dialog, int id) {
string userindirizzo = edittextuserindirizzo.gettext().tostring(); string usercitta = edittextusercitta.gettext().tostring(); string usercap = edittextusercap.gettext().tostring(); string usernazione = edittextusernazione.gettext().tostring(); dbprod.db.rawquery("update utenti set indirizzo="+userindirizzo+", " + "citta="+usercitta+", cap="+usercap+", nazione="+usernazione+" [where id_u ="+id_ut+"]",null); }
with
public void onclick(dialoginterface dialog, int id) { final edittext edittextuserindirizzo = (edittext) cambioview.findviewbyid(r.id.address_edit); string userindirizzo = edittextuserindirizzo.gettext().tostring(); final edittext edittextusercitta = (edittext)cambioview.findviewbyid(r.id.city_edit); string usercitta = edittextusercitta.gettext().tostring(); final edittext edittextusercap = (edittext)cambioview.findviewbyid(r.id.cap_edit); string usercap = edittextusercap.gettext().tostring(); final edittext edittextusernazione = (edittext)cambioview.findviewbyid(r.id.nazione_edit); string usernazione = edittextusernazione.gettext().tostring(); dbprod.db.rawquery("update utenti set indirizzo='"+userindirizzo+"' ," + "citta=' "+usercitta+"', cap="+usercap+", nazione='"+usernazione+"' id_u ="+id_ut+"",null); }
android-edittext alertdialog
Comments
Post a Comment