I'm getting a weird list of errors, some seemingly disconnected but I have no way to tell as I can't even get my App to load to debug. It's a very simple app, 3 radio buttons in a radio group and each one will trigger a different song to play.
I will start by posting my Manifest, my activity file, and layout then post the error log.
Manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cis298.lab2"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:label = "@string/app_name"
android:name = ".LayoutActivity">
<intent-filter >
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
></activity>
</application>
</manifest>
LayoutActivity:
package com.cis298.lab2;
import java.io.IOException;
import com.cis298.lab2.R;
import android.app.Activity;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.widget.RadioGroup;
public class LayoutActivity extends Activity {
int song;
MediaPlayer mediaplayer = MediaPlayer.create(this, song);
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
try {
mediaplayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
RadioGroup radgrp = (RadioGroup) findViewById(R.id.radiogroup);
radgrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.dance:
song = R.raw.redalert;
mediaplayer.start();
break;
case R.id.rap:
song = R.raw.cannedheat;
break;
case R.id.rock:
song = R.raw.movmou8105;
break;}
}
});
}
}
layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="vertical" >
<RadioButton
android:id="@+id/rock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Play Rock" />
<RadioButton
android:id="@+id/rap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Play Rap"
android:checked="true"/>
<RadioButton
android:id="@+id/dance"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Play Dance"
android:textAlignment="center" />
</RadioGroup>
</RelativeLayout>
Log:
02-21 20:34:05.044: D/AndroidRuntime(322): Shutting down VM 02-21 20:34:05.044: W/dalvikvm(322): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 02-21 20:34:05.094: E/AndroidRuntime(322): FATAL EXCEPTION: main 02-21 20:34:05.094: E/AndroidRuntime(322): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.cis298.lab2/com.cis298.lab2.LayoutActivity}: java.lang.NullPointerException 02-21 20:34:05.094: E/AndroidRuntime(322): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.os.Handler.dispatchMessage(Handler.java:99) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.os.Looper.loop(Looper.java:123) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.app.ActivityThread.main(ActivityThread.java:4627) 02-21 20:34:05.094: E/AndroidRuntime(322): at java.lang.reflect.Method.invokeNative(Native Method) 02-21 20:34:05.094: E/AndroidRuntime(322): at java.lang.reflect.Method.invoke(Method.java:521) 02-21 20:34:05.094: E/AndroidRuntime(322): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 02-21 20:34:05.094: E/AndroidRuntime(322): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 02-21 20:34:05.094: E/AndroidRuntime(322): at dalvik.system.NativeStart.main(Native Method) 02-21 20:34:05.094: E/AndroidRuntime(322): Caused by: java.lang.NullPointerException 02-21 20:34:05.094: E/AndroidRuntime(322): at android.content.ContextWrapper.getResources(ContextWrapper.java:80) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.media.MediaPlayer.create(MediaPlayer.java:641) 02-21 20:34:05.094: E/AndroidRuntime(322): at com.cis298.lab2.LayoutActivity.(LayoutActivity.java:15) 02-21 20:34:05.094: E/AndroidRuntime(322): at java.lang.Class.newInstanceImpl(Native Method) 02-21 20:34:05.094: E/AndroidRuntime(322): at java.lang.Class.newInstance(Class.java:1429) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 02-21 20:34:05.094: E/AndroidRuntime(322): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 02-21 20:34:05.094: E/AndroidRuntime(322): ... 11 more
Any help would be greatly appreciated.
Try moving mediaplayer = MediaPlayer.create(this, song);
to inside onCreate()
.
Since the Activity isn't fully initialized until onCreate()
, this may be the cause of the NPE.
However, the next problem is that you create the MediaPlayer with song being initially 0
(int has a default value of 0
when it is an instance variable). So if moving MediaPlayer.create
solves this NPE, the next error will be something about not being able to find the resource. Therefore, call MediaPlayer.create
once song
holds on to something useful.
Maybe something like this will work.
public class LayoutActivity extends Activity {
int song;
MediaPlayer mediaPlayer;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
RadioGroup radgrp = (RadioGroup) findViewById(R.id.radiogroup);
radgrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.dance:
song = R.raw.redalert;
break;
case R.id.rap:
song = R.raw.cannedheat;
break;
case R.id.rock:
song = R.raw.movmou8105;
break;
}
mediaplayer = MediaPlayer.create(LayoutActivity.this, song);
try {
mediaplayer.prepare();
mediaplayer.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
And if song isn't used anywhere else, you can keep it in the scope of onCheckedChanged()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With