Getting IllegalStateException on button click

16,932

The key part of the full stack trace is found here:

Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.unholyalliance.infinitestream/com.example.unholyalliance.infinitestream.Host}; have you declared this activity in your AndroidManifest.xml

It appears you do not have this Host activity declared in your manifest file. Open AndroidManifest.xml and check for or add the following:

<activity
    android:name=".Host" />

Also make sure you fix the issue in Host to first only declare your TextView and then assign the value in onCreate() after setContentView().

private TextView service_status;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_host);
    service_status = (TextView) findViewById(R.id.textView1);
    ...
}
Share:
16,932
yash1996
Author by

yash1996

Updated on July 20, 2022

Comments

  • yash1996
    yash1996 almost 2 years

    On clicking a button to migrate to another activity, the app crashes and log shows:

    java.lang.IllegalStateException: Could not execute method for android:onClick
    

    To debug, I tried to migrate to a blank activity still it shows the same error. Can't understand why!

    This is my main activity java file and it shows error in host()'s intent function:

    package com.example.unholyalliance.infinitestream;
    
    import android.content.Context;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void host(View v)
        {
            Intent i = new Intent(this,Host.class);
            try
            {
                startActivity(i);
            }catch(IllegalStateException e)
            {
                Context context = getApplicationContext();
                CharSequence text = e.getMessage();
                int duration = Toast.LENGTH_SHORT;
    
                Toast toast = Toast.makeText(context, text, duration);
                toast.show();
            }
        }
    
        public void search(View v)
        {
    
        }
    }
    
    
    
    This is my Host.java file:
    
    import android.content.Context;
    
    import android.net.nsd.NsdManager;
    import android.net.nsd.NsdServiceInfo;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    
    public class Host extends AppCompatActivity {
    
        public String mServiceName="Stream";
        ServerSocket mServerSocket=null;
        NsdManager.RegistrationListener mRegistrationListener=null;
        private NsdManager mNsdManager=null;
        int port=9000;
        TextView service_status = (TextView) findViewById(R.id.textView1);
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_host);
            mNsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
            try {
                initializeServerSocket();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public void initializeServerSocket() throws IOException {
            //Initialize a server socket on the next available port.
            mServerSocket = new ServerSocket(0);
    
            // Store the chosen port.
            port =  mServerSocket.getLocalPort();
            registerService(port);
    
        }
    
        public void registerService(int port) {
            // Create the NsdServiceInfo object, and populate it.
            NsdServiceInfo serviceInfo  = new NsdServiceInfo();
    
            // The name is subject to change based on conflicts
            // with other services advertised on the same network.
            serviceInfo.setServiceName("Stream");
            serviceInfo.setServiceType("_http._tcp.");
            serviceInfo.setPort(port);
            mNsdManager.registerService(
                    serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
            initializeRegistrationListener();
    
    
        }
    
    
    
        public void initializeRegistrationListener() {
            mRegistrationListener = new NsdManager.RegistrationListener() {
    
                @Override
                public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) {
                    // Save the service name.  Android may have changed it in order to
                    // resolve a conflict, so update the name you initially requested
                    // with the name Android actually used.
                    mServiceName = NsdServiceInfo.getServiceName();
                  service_status.setText("Success");
                }
    
                @Override
                public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
                    // Registration failed!  Put debugging code here to determine why.
                    service_status.setText("Registration Failed!");
                }
    
                @Override
                public void onServiceUnregistered(NsdServiceInfo arg0) {
                    // Service has been unregistered.  This only happens when you call
                    // NsdManager.unregisterService() and pass in this listener.
                    service_status.setText("Registration not done");
                }
    
                @Override
                public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
                    // Unregistration failed.  Put debugging code here to determine why.
                    service_status.setText("Unregistration failed");
                }
            };
        }
    }
    

    Full Stack Trace:

    E/AndroidRuntime: FATAL EXCEPTION: main
     java.lang.IllegalStateException: Could not execute method for android:onClick
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
         at android.view.View.performClick(View.java:4278)
         at android.view.View$PerformClick.run(View.java:17429)
         at android.os.Handler.handleCallback(Handler.java:725)
         at android.os.Handler.dispatchMessage(Handler.java:92)
         at android.os.Looper.loop(Looper.java:137)
         at android.app.ActivityThread.main(ActivityThread.java:5099)
         at java.lang.reflect.Method.invokeNative(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:511)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
         at dalvik.system.NativeStart.main(Native Method)
      Caused by: java.lang.reflect.InvocationTargetException
         at java.lang.reflect.Method.invokeNative(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:511)
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
         at android.view.View.performClick(View.java:4278) 
         at android.view.View$PerformClick.run(View.java:17429) 
         at android.os.Handler.handleCallback(Handler.java:725) 
         at android.os.Handler.dispatchMessage(Handler.java:92) 
         at android.os.Looper.loop(Looper.java:137) 
         at android.app.ActivityThread.main(ActivityThread.java:5099) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:511) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570) 
         at dalvik.system.NativeStart.main(Native Method) 
      Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.unholyalliance.infinitestream/com.example.unholyalliance.infinitestream.Host}; have you declared this activity in your AndroidManifest.xml?
         at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1633)
         at android.app.Instrumentation.execStartActivity(Instrumentation.java:1425)
         at android.app.Activity.startActivityForResult(Activity.java:3370)
         at android.app.Activity.startActivityForResult(Activity.java:3331)
         at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:843)
         at android.app.Activity.startActivity(Activity.java:3566)
         at android.app.Activity.startActivity(Activity.java:3534)
         at com.example.unholyalliance.infinitestream.MainActivity.host(MainActivity.java:23)
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:511) 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
         at android.view.View.performClick(View.java:4278) 
         at android.view.View$PerformClick.run(View.java:17429) 
         at android.os.Handler.handleCallback(Handler.java:725) 
         at android.os.Handler.dispatchMessage(Handler.java:92) 
         at android.os.Looper.loop(Looper.java:137) 
         at android.app.ActivityThread.main(ActivityThread.java:5099) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:511) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570) 
         at dalvik.system.NativeStart.main(Native Method) 
    

    activity_main.xml file:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.unholyalliance.infinitestream.MainActivity">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Host"
            android:id="@+id/host_button"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="104dp"
            android:clickable="true"
            android:onClick="host" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Search"
            android:id="@+id/search_button"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:onClick="search"
            android:clickable="true" />
    </RelativeLayout>
    
  • Slobodan Antonijević
    Slobodan Antonijević about 8 years
    I'd say he's doing that, otherwise IllegalStateException would not be thrown and would not point to host() function.
  • Miguel Benitez
    Miguel Benitez about 8 years
    The app is caching IllegalStateException the app shouldn't crash if it was an error inside the method host().
  • Blackbelt
    Blackbelt about 8 years
    the app is throwing not caching.
  • Miguel Benitez
    Miguel Benitez about 8 years
    I mean It will be handled it here catch(IllegalStateException e) if was inside host().
  • yash1996
    yash1996 about 8 years
    yeah...my activity_main.xml is exactly the way you have said.No problems with that.