java.lang.RuntimeException: Unable to create application and at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4254) -
i new android , java. tried check code against example somehow application keeps forced close while example works well. need please! in advance! changed name string instead of int. don't know if did correct historyactivity arrayadapter
logcat:
07-31 17:26:56.485: e/arrayadapter(20248): must supply resource id textview 07-31 17:26:56.490: d/androidruntime(20248): shutting down vm 07-31 17:26:56.490: w/dalvikvm(20248): threadid=1: thread exiting uncaught exception (group=0x40fdb2a0) 07-31 17:26:56.505: e/androidruntime(20248): fatal exception: main 07-31 17:26:56.505: e/androidruntime(20248): java.lang.illegalstateexception: arrayadapter requires resource id textview 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.arrayadapter.createviewfromresource(arrayadapter.java:386) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.arrayadapter.getview(arrayadapter.java:362) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.abslistview.obtainview(abslistview.java:2465) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.listview.makeandaddview(listview.java:1775) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.listview.filldown(listview.java:678) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.listview.fillfromtop(listview.java:739) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.listview.layoutchildren(listview.java:1628) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.abslistview.onlayout(abslistview.java:2300) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.view.layout(view.java:14072) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewgroup.layout(viewgroup.java:4607) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.linearlayout.setchildframe(linearlayout.java:1655) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.linearlayout.layoutvertical(linearlayout.java:1513) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.linearlayout.onlayout(linearlayout.java:1426) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.view.layout(view.java:14072) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewgroup.layout(viewgroup.java:4607) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.framelayout.onlayout(framelayout.java:448) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.view.layout(view.java:14072) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewgroup.layout(viewgroup.java:4607) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.linearlayout.setchildframe(linearlayout.java:1655) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.linearlayout.layoutvertical(linearlayout.java:1513) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.linearlayout.onlayout(linearlayout.java:1426) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.view.layout(view.java:14072) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewgroup.layout(viewgroup.java:4607) 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.framelayout.onlayout(framelayout.java:448) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.view.layout(view.java:14072) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewgroup.layout(viewgroup.java:4607) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewrootimpl.performlayout(viewrootimpl.java:1997) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:1818) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewrootimpl.dotraversal(viewrootimpl.java:1115) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:4526) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.choreographer$callbackrecord.run(choreographer.java:725) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.choreographer.docallbacks(choreographer.java:555) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.choreographer.doframe(choreographer.java:525) 07-31 17:26:56.505: e/androidruntime(20248): @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:711) 07-31 17:26:56.505: e/androidruntime(20248): @ android.os.handler.handlecallback(handler.java:615) 07-31 17:26:56.505: e/androidruntime(20248): @ android.os.handler.dispatchmessage(handler.java:92) 07-31 17:26:56.505: e/androidruntime(20248): @ android.os.looper.loop(looper.java:137) 07-31 17:26:56.505: e/androidruntime(20248): @ android.app.activitythread.main(activitythread.java:4921) 07-31 17:26:56.505: e/androidruntime(20248): @ java.lang.reflect.method.invokenative(native method) 07-31 17:26:56.505: e/androidruntime(20248): @ java.lang.reflect.method.invoke(method.java:511) 07-31 17:26:56.505: e/androidruntime(20248): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1038) 07-31 17:26:56.505: e/androidruntime(20248): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:805) 07-31 17:26:56.505: e/androidruntime(20248): @ dalvik.system.nativestart.main(native method) 07-31 17:26:56.505: e/androidruntime(20248): caused by: java.lang.classcastexception: android.widget.linearlayout cannot cast android.widget.textview 07-31 17:26:56.505: e/androidruntime(20248): @ android.widget.arrayadapter.createviewfromresource(arrayadapter.java:379) 07-31 17:26:56.505: e/androidruntime(20248): ... 42 more
contacts.java
package com.elson.projectversion; import android.content.context; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.database.sqlite.sqliteexception; import android.util.log; public class contacts implements comparable<contacts> { private long id; private string name; private int phone; private int email; private date date; private double runningaverage; public contacts(string name, int phone, date date) { this.name = name; this.phone = phone; this.date = date; } public contacts(long id, string name,int phone) { this.id=id; this.phone=phone; this.name= (name); } public long getid() { return id; } public void setid(long id) { this.id = id; } public int getphone() { return phone; } public void setphone(int phone) { this.phone = phone; } public string getname() { return name; } public void setname(string name) { this.name = name; } public date getdate() { return date; } public long getdateepoch(){ return date.gettime()/1000; } public void setdateepoch(long seconds){ date= new date (seconds*1000); } public void setdate(date date) { this.date = date; } public void setrunningaverage(double runningaverage) { this.runningaverage = runningaverage; } public boolean equals(object that){ contacts bs = (contacts) that; return this.date.equals(bs.date); } @override public string tostring() { string result; // "id" + id +" " dateformat df = dateformat.getdateinstance(dateformat.short); result = df.format(date) + "" + name + "" + phone ; return result; } @override public int compareto(contacts another) { // todo auto-generated method stub return 0; } }
contactsactivityapplication:
package com.elson.projectversion; import java.util.arraylist; import android.app.application; import android.content.contentvalues; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.util.log; import static com.elson.projectversion.mycontactsql.*; public class entercontactsactivity extends activity { private button savebutton; private edittext nameedittext; private edittext phoneedittext; private button exitbutton; private edittext emailedittext; private textview date; private int month;//private within class private int day; private int year; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_addcontacts); setupviews(); calendar calendar =calendar.getinstance(); year = calendar.get(calendar.year); month = calendar.get(calendar.month); day = calendar.get(calendar.day_of_month); date today = calendar.gettime(); dateformat df = dateformat.getdateinstance(dateformat.medium); string cs = df.format(today); date.settext(cs); } public void saveclickhandler(view v){ string contactsscore; contactsscore= nameedittext.gettext().tostring(); string name = string.format(contactsscore, null); contactsscore= phoneedittext.gettext().tostring(); int phone = integer.parseint(contactsscore); log.d("entercontacts" , "i hear save button"); if( isvalid(phone) ) { contacts contacts; date dateofgames= new gregoriancalendar(year,month,day).gettime(); contacts = new contacts (name , phone , dateofgames); contactsactivityapplication app = (contactsactivityapplication) getapplication(); //might wrong log.d("debugging", "app type: " + app.getclass().getname()); //need add function addbowlingscores app.addallcontacts(contacts); toast.maketext(getapplicationcontext(), "your contact has been saved!", toast.length_short).show(); } else{ //pop dialog data invalid alertdialog.builder builder = new alertdialog.builder(this); builder.settitle("invalid phone number") .setmessage("phone numbers cannot have more 8 numbers") .setcancelable(false) .setpositivebutton("ok", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub dialog.cancel(); } }); alertdialog alert = builder.create(); alert.show(); } } private boolean isvalid(int phone ) { if(phone > 0 && phone <100000000) return true; return false; // todo auto-generated method stub } public void handleshowhistoryclick (view v) { intent intent = new intent(this, historyactivity.class); startactivity(intent); } private void setupviews() { exitbutton = (button) findviewbyid(r.id.btnexit); savebutton =(button) findviewbyid(r.id.btnsave); nameedittext= (edittext) findviewbyid(r.id.nameedittext); phoneedittext= (edittext) findviewbyid(r.id.phoneedittext); emailedittext= (edittext) findviewbyid(r.id.emailedittext); date = (textview) findviewbyid(r.id.datetextview); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.addcontacts, menu); return true; } }
entercontactsactivity:
package com.elson.projectversion; import java.text.dateformat; import java.util.calendar; import java.util.date; import java.util.gregoriancalendar; import android.os.bundle; import android.app.activity; import android.app.alertdialog; import android.content.dialoginterface; import android.util.log; import android.view.menu; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.widget.toast; public class entercontactsactivity extends activity { private button savebutton; private edittext nameedittext; private edittext phoneedittext; private button exitbutton; private edittext emailedittext; private textview date; private int month;//private within class private int day; private int year; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_addcontacts); setupviews(); calendar calendar =calendar.getinstance(); year = calendar.get(calendar.year); month = calendar.get(calendar.month); day = calendar.get(calendar.day_of_month); date today = calendar.gettime(); dateformat df = dateformat.getdateinstance(dateformat.medium); string cs = df.format(today); date.settext(cs); } public void saveclickhandler(view v){ string contactsscore; contactsscore= nameedittext.gettext().tostring(); int name = integer.parseint(contactsscore); contactsscore= phoneedittext.gettext().tostring(); int phone = integer.parseint(contactsscore); contactsscore = emailedittext.gettext().tostring(); int email = integer.parseint(contactsscore); log.d("entercontacts" , "i hear save button"); if( isvalid(name) && isvalid(phone) && isvalid(email) ) { contacts contacts; date dateofgames= new gregoriancalendar(year,month,day).gettime(); contacts = new contacts (name , phone , email, dateofgames); contactsactivityapplication app = (contactsactivityapplication) getapplication(); //might wrong log.d("debugging", "app type: " + app.getclass().getname()); //need add function addbowlingscores app.addallcontacts(contacts); toast.maketext(getapplicationcontext(), "your contact has been saved!", toast.length_short).show(); } else{ //pop dialog data invalid alertdialog.builder builder = new alertdialog.builder(this); builder.settitle("invalid phone number") .setmessage("phone numbers cannot have more 8 numbers") .setcancelable(false) .setpositivebutton("ok", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub dialog.cancel(); } }); alertdialog alert = builder.create(); alert.show(); } } private boolean isvalid(int phone) { if(phone <= 0 && phone >=100000000) return true; return false; // todo auto-generated method stub } private void setupviews() { exitbutton = (button) findviewbyid(r.id.btnexit); savebutton =(button) findviewbyid(r.id.btnsave); nameedittext= (edittext) findviewbyid(r.id.nameedittext); phoneedittext= (edittext) findviewbyid(r.id.phoneedittext); emailedittext= (edittext) findviewbyid(r.id.emailedittext); date = (textview) findviewbyid(r.id.datetextview); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.addcontacts, menu); return true; } }
mycontactssql:
package com.elson.projectversion; import android.content.context; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.database.sqlite.sqliteexception; import android.util.log;
public class mycontactsql extends sqliteopenhelper {
public static final string db_name ="mycontactsql.sqlite"; public static final int db_version = 1; public static string contact_list_table = "contactlisttable"; public static string record_id ="id"; public static string name = "name"; public static string phone_number="phonenumber"; public mycontactsql(context context) { super(context, db_name, null, db_version); } @override public void oncreate(sqlitedatabase contactlistdb) { string sqlstatement = "create table " + contact_list_table + " (" + record_id + " integer primary key autoincrement not null," + name + " long," + phone_number +" integer" +");"; log.d("contact database", sqlstatement); contactlistdb.execsql(sqlstatement); } @override public void onupgrade(sqlitedatabase arg0, int arg1, int arg2) { } }
historyactivity:
import java.util.arraylist; import android.app.alertdialog; import android.app.listactivity; import android.content.dialoginterface; import android.os.bundle; import android.util.log; import android.view.view; import android.widget.adapterview; import android.widget.adapterview.onitemclicklistener; import android.widget.arrayadapter; import android.widget.listview; public class historyactivity extends listactivity { bundle savedinstancestate; private arraylist <contacts> allcontacts; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); this.savedinstancestate = savedinstancestate; setcontentview(r.layout.history_layout); //get data app contactsactivityapplication app = (contactsactivityapplication) getapplication(); allcontacts = app.getallcontacts(); //view --- adapter ------ data setlistadapter( new arrayadapter<contacts> (this, r.layout.history_row, allcontacts )); listview listview = this.getlistview(); listview.setonitemclicklistener( new onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { verifydeleterow(position); log.d("debug", "i hear item selected:" + position); // todo auto-generated method stub } } ); } private void verifydeleterow(final int position){ //pop dialog confirm delete row alertdialog.builder builder = new alertdialog.builder(this); builder.settitle("delete series?") .setmessage("do want delete data?" + allcontacts.get(position)) .setcancelable(false) .setnegativebutton("no! leave there!", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub dialog.cancel(); } }) .setpositivebutton("delete", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { contacts todelete = allcontacts.get(position); contactsactivityapplication app = (contactsactivityapplication) getapplication(); app.deletebowlingscores(todelete); // todo auto-generated method stub oncreate(savedinstancestate); } }); alertdialog alert = builder.create(); alert.show(); } }
the date
object passing df.format
null, causing nullpointerexception
public string tostring() { string result; // "id" + id +" " dateformat df = dateformat.getdateinstance(dateformat.short); result = df.format(date) + "" + name + "" + phone ; ^^^^^^^^^^^^^^^ date object null above return result; }
you need null check on date
instance
if(date != null) { dateformat df = dateformat.getdateinstance(dateformat.short); result = df.format(date) + "" + name + "" + phone ; } else { result = name + "" + phone ; }
Comments
Post a Comment