Reputation: 347
I've been trying to figure out this problem for far to long so hopefully you guys can help. I am running an IntentService off of a button click and I'm getting a null pointer exception. Here is my code:
MainActivity:
public class MainActivity extends Activity {
private ResponseReceiver receiver;
private Button getButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new ResponseReceiver();
registerReceiver(receiver, filter);
getButton = (Button) findViewById(R.id.button1);
setGetButtonOnClickListener();
}
public void setGetButtonOnClickListener()
{
getButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
Intent msgIntent = new Intent(getApplicationContext(), XMLIntentService.class);
msgIntent.putExtra(XMLIntentService.PARAM_IN_MSG, "test");
startService(msgIntent);
Toast.makeText(getApplicationContext(), "intent started" , Toast.LENGTH_SHORT).show();
}
});
}
public class ResponseReceiver extends BroadcastReceiver {
public static final String ACTION_RESP = "com.example.intent.action.MESSAGE_PROCESSED";
@Override
public void onReceive(Context context, Intent intent) {
String information = intent.getStringExtra(XMLIntentService.PARAM_OUT_MSG);
information += " yay!";
Toast.makeText(getApplicationContext(), information , Toast.LENGTH_SHORT).show();
}
}
}
XMLIntentService
public class XMLIntentService extends IntentService {
public static final String PARAM_IN_MSG = "omsg";
public static final String PARAM_OUT_MSG = "omsg";
public XMLIntentService() {
super("XMLIntentService");
Toast.makeText(getApplicationContext(), "Intent Service Called" , Toast.LENGTH_SHORT).show();
}
@Override
protected void onHandleIntent(Intent intent) {
Toast.makeText(getApplicationContext(), "On handle intent called" , Toast.LENGTH_SHORT).show();
String msg = intent.getStringExtra(PARAM_IN_MSG);
//Get XML info here
String resultTxt = "Yayy";
Log.v("XMLIntentService", "Handling msg: " + resultTxt);
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ResponseReceiver.ACTION_RESP);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putExtra(PARAM_OUT_MSG, resultTxt);
sendBroadcast(broadcastIntent);
}
}
Log File:
11-08 23:06:31.130: E/Trace(1304): error opening trace file: No such file or directory (2)
11-08 23:06:31.902: D/gralloc_goldfish(1304): Emulator without GPU emulation detected.
11-08 23:06:39.922: D/AndroidRuntime(1304): Shutting down VM
11-08 23:06:39.922: W/dalvikvm(1304): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
11-08 23:06:39.951: E/AndroidRuntime(1304): FATAL EXCEPTION: main
11-08 23:06:39.951: E/AndroidRuntime(1304): java.lang.RuntimeException: Unable to instantiate service com.example.cis345lab5.XMLIntentService: java.lang.NullPointerException
11-08 23:06:39.951: E/AndroidRuntime(1304): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2347)
11-08 23:06:39.951: E/AndroidRuntime(1304): at android.app.ActivityThread.access$1600(ActivityThread.java:130)
11-08 23:06:39.951: E/AndroidRuntime(1304): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
11-08 23:06:39.951: E/AndroidRuntime(1304): at android.os.Handler.dispatchMessage(Handler.java:99)
11-08 23:06:39.951: E/AndroidRuntime(1304): at android.os.Looper.loop(Looper.java:137)
11-08 23:06:39.951: E/AndroidRuntime(1304): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-08 23:06:39.951: E/AndroidRuntime(1304): at java.lang.reflect.Method.invokeNative(Native Method)
11-08 23:06:39.951: E/AndroidRuntime(1304): at java.lang.reflect.Method.invoke(Method.java:511)
11-08 23:06:39.951: E/AndroidRuntime(1304): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-08 23:06:39.951: E/AndroidRuntime(1304): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-08 23:06:39.951: E/AndroidRuntime(1304): at dalvik.system.NativeStart.main(Native Method)
11-08 23:06:39.951: E/AndroidRuntime(1304): Caused by: java.lang.NullPointerException
11-08 23:06:39.951: E/AndroidRuntime(1304): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
11-08 23:06:39.951: E/AndroidRuntime(1304): at com.example.cis345lab5.XMLIntentService.<init>(XMLIntentService.java:16)
11-08 23:06:39.951: E/AndroidRuntime(1304): at java.lang.Class.newInstanceImpl(Native Method)
11-08 23:06:39.951: E/AndroidRuntime(1304): at java.lang.Class.newInstance(Class.java:1319)
11-08 23:06:39.951: E/AndroidRuntime(1304): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2344)
11-08 23:06:39.951: E/AndroidRuntime(1304): ... 10 more
In my Android Manifest.xml
<service android:enabled="true"
android:name=".XMLIntentService"></service>
Upvotes: 1
Views: 709
Reputation: 3500
The issue is this line in the XmlIntentService constructor:
Toast.makeText(getApplicationContext(), "Intent Service Called" , Toast.LENGTH_SHORT).show();
When the IntentService is being constructed (specifically, before attach(...) is called), the mBase member variable in the parent Service is null. The call to getApplicationContext is trying to dereference mBase in the parent Service class, resulting in a NullReferenceException.
The solution is to remove the Toast.makeText line from the XmlIntentService constructor.
Upvotes: 2