2

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>
1
  • Is it declared correctly in your manifest.xml? Commented Sep 15, 2014 at 22:55

3 Answers 3

2

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;
Sign up to request clarification or add additional context in comments.

5 Comments

hi, for some reason, it won't let me add the following method: public void onCheckedChanged(RadioGroup group, int checkedId){} when it is a regular class, so i need to put it as an abstract in order for that to work. is there a way I can add that method w.out putting the TutorialOne as an abstract? Like, I want to use the same method as the tutorial video because it returns the int. so i can use the switch case. the ones eclipse let me use is this one : @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub }
Making it abstract is just hiding that you're not properly overriding the OnCheckedChangeListener interface methods. Make it non-abstract, and then fix the override so that the signature is boolean isChecked, not int isChecked.
Thanks a lot. let me try that.
Hi, I changed it according to what you told me to do and came across some errors/suggestions so I just did what the compiler told me to do.and came across this: I have to create an interface for OncheckedChangedListner, and I did , but it still gives me error
Nvm. I got it :) i did exactly what you told me to do and it worked now. I avoid the hardcoding that they keep on telling me to do. anyway. thanks a lot.
0

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*/
        }
    });

Comments

0

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; 


    }
}
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.