Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting IllegalStateException on button click

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>
like image 994
yash1996 Avatar asked Apr 08 '16 14:04

yash1996


1 Answers

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);
    ...
}
like image 51
George Mulligan Avatar answered Nov 06 '22 13:11

George Mulligan