java.lang.RuntimeException: Unable to instantiate activity ComponentInfo has no zero argument constructor

I keep getting this error when i run my app in the AVD.

Things you should know:

  1. i am an intermediate programer (still learning) so please help me to understand your answers. :-)

  2. i have tried many things to fix this problem like:

    1. Cleaning/Rebuilding project.
    2. Renaming all of my classes.
    3. Adding google play services to project.
    4. syncing the gradle with my project.
    5. Changing public class InputPage extends Activity { to public class InputPage extends AppCompatActivity {.

there is also an error in the Android manifest file that says the .InputPage activity has no default constructor. hope that helps.

Here is the java code

package com.example.***************;


import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.widget.Button;
import android.content.Intent;
import android.view.View;



public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        requestWindowFeature(Window.FEATURE_ACTION_BAR);
        setContentView(R.layout.activity_main);
    }

    public void toInputScreen(View view){
        Button addButton = (Button)findViewById(R.id.addButton);
        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent1 = new Intent(MainActivity.this, InputPage.class);
                startActivity(intent1);
            }
        });

    }
}

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.cohen.not_at_homes_app.MainActivity"
    android:background="#ffffff">


    <Button
        android:id="@+id/addButton"
        android:layout_width="150dp"
        android:layout_height="48dp"
        android:layout_marginBottom="16dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="449dp"
        android:onClick="toInputScreen"
        android:background="@drawable/buttons"
        android:text="@string/ButtonAddButton"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0" />

    <Button
        android:id="@+id/deleteButton"
        android:layout_width="148dp"
        android:layout_height="47dp"
        android:layout_marginBottom="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="449dp"
        android:text="@string/ButtonDeleteButton"
        android:background="@drawable/buttons"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0" />

    <LinearLayout
        android:layout_width="341dp"
        android:layout_height="519dp"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:orientation="horizontal"
        android:id="@+id/linearLayout"
        android:clickable="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintVertical_bias="0.0">

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

The code above is the activity i am coming from (java, XML).

The button defined is supposed to start the activity below (java,XML).

package com.example.*****.*****************;



import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;




public class InputPage extends Activity {
    public String name;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    public void name(String name) {
        this.name = name;
        name = getName();
    }

    public InputPage(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }



    public void toInputScreen2(View view) {
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent2 = new Intent(InputPage.this, InputPage2.class);
                startActivity(intent2);
            }
        });

    }

}

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".InputPage"
    android:background="@color/BackgroundGrey">

    <TextView
        android:id="@+id/mapNo"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:text="@string/mapNoTextBox"
        android:textColor="@color/textColour"
        android:textSize="30sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="16dp"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintHorizontal_bias="0.04"
        app:layout_constraintVertical_bias="0.13" />

    <TextView
        android:id="@+id/inputPageTitle"
        android:layout_width="178dp"
        android:layout_height="21dp"
        android:text="@string/inputPageTitle"
        android:textSize="20sp"
        android:textStyle="bold"
        android:textColor="@color/textColour"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        app:layout_constraintVertical_bias="0.01999998" />

    <EditText
        android:id="@+id/noInput"
        android:layout_width="48dp"
        android:layout_height="39dp"
        android:ems="10"
        android:inputType="number"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        app:layout_constraintVertical_bias="0.13"
        app:layout_constraintHorizontal_bias="0.51" />

    <TextView
        android:layout_width="150dp"
        android:layout_height="38dp"
        android:text="@string/location"
        android:textColor="@color/textColour"
        android:textSize="30sp"
        android:textStyle="bold"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        app:layout_constraintHorizontal_bias="0.041"
        app:layout_constraintVertical_bias="0.24" />

    <EditText
        android:id="@+id/location"
        android:layout_width="177dp"
        android:layout_height="44dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:hint="@string/hintText"
        android:textColorHint="@color/hintTextColour"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintHorizontal_bias="0.952"
        app:layout_constraintVertical_bias="0.243" />

    <EditText
        android:id="@+id/dateBox"
        android:layout_width="133dp"
        android:layout_height="44dp"
        android:ems="10"
        android:inputType="date"
        android:hint="@string/dateBoxHint"
        android:textColorHint="@color/hintTextColour"
        android:layout_marginLeft="61dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintHorizontal_bias="0.335"
        app:layout_constraintVertical_bias="0.374" />

    <TextView
        android:layout_width="101dp"
        android:layout_height="34dp"
        android:text="@string/dateBox"
        android:textColor="@color/textColour"
        android:textStyle="bold"
        android:textSize="30sp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintHorizontal_bias="0.032"
        app:layout_constraintVertical_bias="0.369" />

    <Button
        android:id="@+id/button2"
        android:layout_width="165dp"
        android:layout_height="58dp"
        android:text="@string/continueButton"
        android:background="@drawable/buttons"
        android:layout_marginRight="8dp"
        android:onClick="toInputScreen2"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintHorizontal_bias="0.502"
        app:layout_constraintVertical_bias="0.778" />


</android.support.constraint.ConstraintLayout>

Here is the AndroidManifest file.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.cohen.not_at_homes_app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@android:style/Theme.NoTitleBar">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name=".InputPage">

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

        </activity>
    </application>

</manifest>

And here is the build.gradle file

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.cohen.notathomesapp"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.cuboid:cuboidcirclebutton:1.0.3'

}

Please help, all info is appreciated.

Upvotes: 0

Views: 5679

Answers (2)

user3132072
user3132072

Reputation:

Activity classes should have constructors. Your InputPage activity class has a constructor that takes a String argument,remove it and everything will work fine.

public class InputPage extends Activity {

    //.........Remove this constructor......

        public InputPage(String name) {
            this.name = name;
        }

    //.......................................

    }

You can still pass data to the activity by intent.
example-

start InputPage activity-

String name="Jhon doe";
Intent intent = new Intent(context, InputPage.class);
intent.putExtra("key",name);
startActivity(intent)

retrive this data in the InputPage activity

public class InputPage extends Activity {

    //...Other Methods....

        @Override
        protected void onCreate(bundle savedInstanceState){
           super.onCreate(savedInstanceState);
           setContentView(R.layout.input_page);
           //get this intent which started this activity
           Intent intent = getIntent();
           //get the data from the intent
           String name = intent.getStringExtra("key");
        }

    //...Other Methods....

    }

Upvotes: 0

Sasi Kumar
Sasi Kumar

Reputation: 13313

change your onCreate()

 Button addButton;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.inputPage );
 addButton= (Button)findViewById(R.id.addButton);
 }

Upvotes: 1

Related Questions