Chidori
Chidori

Reputation: 15

Can't instantiate class -android programming

I was following the tutorial videos here: http://www.youtube.com/watch?v=pZaRNVwKAy4&list=PLB03EA9545DD188C3&index=7 and came across a few errors while following the tutorials. Everything works fine until i started to work on the Tutorial: onCheckedChanged method. Can someone explain what I am doing wrong? Thanks a lot.

LogCat Code

09-15 18:38:22.444: E/MediaPlayer(1764): Should have subtitle controller already set
09-15 18:38:27.984: E/MediaPlayer(1764): Should have subtitle controller already set
09-15 18:38:31.374: E/AndroidRuntime(1764): FATAL EXCEPTION: main
09-15 18:38:31.374: E/AndroidRuntime(1764): Process: com.example.myfirstapp, PID: 1764
09-15 18:38:31.374: E/AndroidRuntime(1764): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.TutorialOne}: java.lang.InstantiationException: can't instantiate class com.example.myfirstapp.TutorialOne
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.os.Handler.dispatchMessage(Handler.java:102)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.os.Looper.loop(Looper.java:136)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.app.ActivityThread.main(ActivityThread.java:5017)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at java.lang.reflect.Method.invokeNative(Native Method)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at java.lang.reflect.Method.invoke(Method.java:515)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at dalvik.system.NativeStart.main(Native Method)
09-15 18:38:31.374: E/AndroidRuntime(1764): Caused by: java.lang.InstantiationException: can't instantiate class com.example.myfirstapp.TutorialOne
09-15 18:38:31.374: E/AndroidRuntime(1764):     at java.lang.Class.newInstanceImpl(Native Method)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at java.lang.Class.newInstance(Class.java:1208)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
09-15 18:38:31.374: E/AndroidRuntime(1764):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
09-15 18:38:31.374: E/AndroidRuntime(1764):     ... 11 more

Main Java Code

package com.example.myfirstapp;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;


public class Main extends Activity {
// declare variables for the who class 
MediaPlayer logoMusic; 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    // start music command 
    logoMusic=MediaPlayer.create(Main.this, R.raw.melody);
    logoMusic.start();

    // start thread 
    Thread logoTimer=new Thread(){
        public void run(){
            try {
                sleep(5000); // 1k is 1sec 
                Intent menuIntent=new Intent("com.example.myfirstapp.MENU");// address in   manifest 
                startActivity(menuIntent);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            finally
            {
                finish();
            }

        }

    };
    logoTimer.start();

}

@Override
protected void onPause() {
    super.onPause();

    logoMusic.release();

}

}

Menu Java code

package com.example.myfirstapp;

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



public class Menu extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final MediaPlayer buttonSound=MediaPlayer.create(Menu.this, R.raw.button);// make sure it is a final variable bc u are using it in sub 

    // set up buttons reference
    Button tut1=(Button) findViewById(R.id.tutorial1);
    Button tut2=(Button) findViewById(R.id.tutorial2);

    // setting up the button functions
    tut1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound.start();

            startActivity(new Intent("com.example.myfirstapp.TutorialOne"));// short cut in  creating the intent 
        }
    });

     tut2.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {

            // TODO Auto-generated method stub
            buttonSound.start();
            startActivity(new Intent("com.example.myfirstapp.TutorialOne"));
        }


    });
    }

    @Override
    protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
}

}

TutorialOne java code

package com.example.myfirstapp;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;

@SuppressLint("RtlHardcoded")
public abstract class TutorialOne extends Activity implements OnCheckedChangeListener{

// set up variables 
TextView textOut;
EditText textIn; 
RadioGroup gravityG,styleG;


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tutorial1);
    //similar to how you set the button to reference to xml 
    textOut=(TextView)findViewById(R.id.tvChange);
    textIn=(EditText)findViewById(R.id.editText1);
    gravityG=(RadioGroup)findViewById(R.id.rgGravity);
    styleG=(RadioGroup)findViewById(R.id.rgStyle);

    Button gen=(Button)findViewById(R.id.generate);
    gen.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            // when you click generate, it will text out 

            textOut.setText(textIn.getText());// get user input and output
        }
    });

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
}

public void onCheckedChanged(CompoundButton buttonView, int isChecked) {
    // TODO Auto-generated method stub
    switch(isChecked){
    case R.id.rbLeft:
        textOut.setGravity(Gravity.LEFT);// set gravity to left 
        break;
    case R.id.rbCenter:
        textOut.setGravity(Gravity.CENTER);
        break;
    case R.id.rbRight:
        textOut.setGravity(Gravity.RIGHT);
        break;
}
}}

main .xml

<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.myfirstapp.Main" >

<Button
    android:id="@+id/tutorial1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button1" />

<Button
    android:id="@+id/tutorial2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="31dp"
    android:text="@string/button2" />

</RelativeLayout>

splash.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" 
android:background="@drawable/flash">


</LinearLayout>

tutorial1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:text=""
    android:textStyle="bold" >

    <requestFocus />
</EditText>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2" >

    <TextView
        android:id="@+id/tvStyle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/style"
        android:gravity="center" />

    <TextView
        android:id="@+id/tvGravity"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="@string/gravity" />
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2" >

    <RadioGroup
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:id="@+id/rgStyle" >

        <RadioButton
            android:id="@+id/rbNormal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/normal" />

        <RadioButton
            android:id="@+id/rbItalic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/italic" />

        <RadioButton
            android:id="@+id/rbBold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/bold" />
    </RadioGroup>

    <RadioGroup
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:id="@+id/rgGravity" >

        <RadioButton
            android:id="@+id/rbLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/left" />

        <RadioButton
            android:id="@+id/rbCenter"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/center" />

        <RadioButton
            android:id="@+id/rbRight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/right" />
    </RadioGroup>
</LinearLayout>

<TextView
    android:id="@+id/tvChange"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="@string/text_view_change"
    android:textStyle="bold" />

<Button
    android:id="@+id/generate"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/generate"
    android:textSize="25sp" />

</LinearLayout>

AndroidManifest code

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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".Main"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

      <activity
        android:name=".Menu"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.example.myfirstapp.MENU" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

        <activity
        android:name=".TutorialOne"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name= "com.example.myfirstapp.TutorialOne" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>



</application>

</manifest>

Upvotes: 2

Views: 434

Answers (3)

Chidori
Chidori

Reputation: 15

thanks to everyone's help, I was able to generate a new code for the TutorialOne, but I do not know why I cannot get the options to work: LEFT,Right, Normal,Italic,Bold. Here is the new code for tutorial One, I also changed the Intent in the Main java according to what Kcoppock suggested.

Here is my new code :

package com.example.myfirstapp;


import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;

public class TutorialOne extends Activity implements OnCheckedChangeListener

{

// set up variables
TextView textOut;
EditText textIn;
RadioGroup gravityG, styleG;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tutorial1);
    // similar to how you set the button to reference to xml
    textOut = (TextView) findViewById(R.id.tvChange);
    textIn = (EditText) findViewById(R.id.editText1);
    gravityG = (RadioGroup) findViewById(R.id.rgGravity);
    styleG = (RadioGroup) findViewById(R.id.rgStyle);

    Button gen = (Button) findViewById(R.id.generate);
    gen.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            // when you click generate, it will text out

            textOut.setText(textIn.getText());// get user input and output

        }
    });

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
}


@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
    // TODO Auto-generated method stub

    switch (checkedId) {
    case R.id.rbLeft:
        textOut.setGravity(Gravity.LEFT);// set gravity to left
        break;
    case R.id.rbCenter:
        textOut.setGravity(Gravity.CENTER);
        break;
    case R.id.rbRight:
        textOut.setGravity(Gravity.RIGHT);
        break;
    case R.id.rbNormal: 
        textOut.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL),Typeface.NORMAL);
        break; 
    case R.id.rbItalic: 
        textOut.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC),Typeface.ITALIC);
        break; 
    case R.id.rbBold: 
        textOut.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD),Typeface.BOLD);
        break; 


    }
}
}

Upvotes: 0

Lucas Crawford
Lucas Crawford

Reputation: 3118

In order to use the the onCheckedChanged() method, you need a listener in order to get the method. Do so using an anonymous class listener defined by a method, or in the onCreate() method like so:

button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
    @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
            /*Do things here*/
        }
    });

Upvotes: 0

Kevin Coppock
Kevin Coppock

Reputation: 134664

Your TutorialOne Activity is abstract. You can't instantiate an abstract class. As an aside, you shouldn't be hardcoding the class name anyway. If that's what your tutorial is suggesting, then I suggest running far, far away.

Intent menuIntent = new Intent(Main.this, Menu.class);
startActivity(menuIntent);

EDIT: As for the onCheckedChanged(), you need to implement RadioGroup.OnCheckedChangeListener, not CompoundButton.OnCheckedChangeListener. The CompoundButton one uses a boolean while the RadioGroup one provides an integer.

import android.widget.CompoundButton.OnCheckedChangeListener;

should be

import android.widget.RadioGroup.OnCheckedChangeListener;

Upvotes: 2

Related Questions