java - Android could not find method in Activity class -
i'm following instructions on android developers site creating first app. first few platform tests worked fine me, goes south when trying use intent pass message 1 activity another. specifically, when press text field enter input, app crashes (see intended behavior @ https://developer.android.com/training/basics/firstapp/starting-activity.html#displaymessage).
a problem seems same mine reported here on year ago, no satisfactory answer: could not find method sendmessage(view) in activity class
a couple things not problem:
- extends actionbaractivity -- know deprecated worked fine before bug.
- hardcoded onclick in xml -- have heard not best practice, doubt official android tutorial instruct if didn't @ least work.
my own basic , ill-informed diagnosis though wrote method sendmessage(view view) in myactivity.java, runtime doesn't think it's there. lost why. here's code:
myactivity.java:
package org.example.myfirstapp; import android.content.intent; import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.edittext; public class myactivity extends actionbaractivity { public final static string extra_message = "org.example.myfirstapp.message"; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_my); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_my, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } /** called when user clicks send button */ public void sendmessage(view view) { intent intent = new intent(this, displaymessageactivity.class); edittext edittext = (edittext) findviewbyid(r.id.edit_message); string message = edittext.gettext().tostring(); intent.putextra(extra_message, message); startactivity(intent); } } activity_my.xml:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <edittext android:id="@+id/edit_message" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="@string/edit_message" android:onclick="sendmessage"/> <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send"/> </linearlayout> displaymessageactivity.java:
package org.example.myfirstapp; import android.content.intent; import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; import android.widget.textview; public class displaymessageactivity extends actionbaractivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //get message intent intent intent = getintent(); string message = intent.getstringextra(myactivity.extra_message); //create text view textview textview = new textview(this); textview.settextsize(40); textview.settext(message); //set text view activity layout setcontentview(textview); } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } } crash output:
--------- beginning of crash 05-30 11:41:37.734 23198-23198/? e/androidruntime﹕ fatal exception: main process: org.benwiley.myfirstapp, pid: 23198 java.lang.illegalstateexception: not find method sendmessage(view) in activity class android.support.v7.internal.widget.tintcontextwrapper onclick handler on view class android.support.v7.widget.appcompatedittext id 'edit_message' @ android.view.view$1.onclick(view.java:4007) @ android.view.view.performclick(view.java:4780) @ android.view.view$performclick.run(view.java:19866) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:135) @ android.app.activitythread.main(activitythread.java:5254) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:903) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:698) caused by: java.lang.nosuchmethodexception: sendmessage [class android.view.view] @ java.lang.class.getmethod(class.java:664) @ java.lang.class.getmethod(class.java:643) @ android.view.view$1.onclick(view.java:4000) at android.view.view.performclick(view.java:4780) at android.view.view$performclick.run(view.java:19866) at android.os.handler.handlecallback(handler.java:739) at android.os.handler.dispatchmessage(handler.java:95) at android.os.looper.loop(looper.java:135) at android.app.activitythread.main(activitythread.java:5254) at java.lang.reflect.method.invoke(native method) at java.lang.reflect.method.invoke(method.java:372) at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:903) at com.android.internal.os.zygoteinit.main(zygoteinit.java:698) thanks in advance. i'm pretty lost. p.s. using api 22 build tools 22.0.1.
i think have many mistakes
activity_my.xml
<button android:id="@+id/btnsend" android:layout_width="wrap_content" android:layout_height="wrap_content"> in myactivity.java:
button button = (button).findviewbyid(r.id.btnsend); button.setonclicklistener(new view.onclicklistener(){ public void onclick(view v) { edittext edittext = (edittext) findviewbyid(r.id.edit_message); sendmessage(v);} }); in androidmanifest.xml :
<activity android:name=".displaymessageactivity" android:label="@string/title_activity_display_message">
Comments
Post a Comment