java - How to call a method in an Activity from another class -
i working on sms application , have method in mainactivity
perform button click:
public void updatemessage() { viewmessages.performclick(); }
this method works fine , performs button click when call method inside mainactivity
class.
but, when call method other class shown below, call main activity's updatemessage
method intentservicehandler
class, getting nullpointerexception
:
java.lang.nullpointerexception: attempt invoke virtual method 'boolean android.widget.button.performclick()' on null object reference
public class intentservicehandler extends intentservice { public intentservicehandler() { super("intentservicehandler"); } @override protected void onhandleintent(intent intent) { string message = intent.getstringextra("message"); transactiondatabase transactiondb = new transactiondatabase(this, 1); transactiondb.addmessage(message); mainactivity mainactivity = new mainactivity(); mainactivity.updatemessage(); } }
how can handle this?
edit: tried make updatemessage method static, , following exception
android.view.viewrootimpl$calledfromwrongthreadexception: original thread created view hierarchy can touch views.
don't call method of activity in intentservice, try use intent communicate between activity , intentservice.
replace last 2 statements onhandleintent()
intent intent = new intent(); broadcastintent.setaction(mainactivity.update_message); broadcastintent.addcategory(intent.category_default); sendbroadcast(intent);
and should register broadcastreceiver in oncreate() of mainacitivty like
private broadcastreceiver receiver; @override public void oncreate(bundle savedinstancestate){ // .... intentfilter filter = new intentfilter(); filter.addaction(update_message); receiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { // based on intent's action // example, call updatemessage() } }; registerreceiver(receiver, filter); }
onhandleintent of intentservice run in thread (instead of main thread / ui thread), updating ui components in onhandleintent isn't permitted.
Comments
Post a Comment