I just started programming for Android when my boss asked me to make him a mobile app so I completed all of this in two days and taught myself as I was doing it, mostly from this site. I keep getting a nullPointerException when i run my program and click on the button that switches the the next activity
First activity:
package com.Android.HelpDeskMobileApp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class HelpDeskFront extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first);
Button serviceButton = (Button)findViewById(R.id.serviceButton),
orderButton = (Button)findViewById(R.id.OrderButton),
programmingButton = (Button)findViewById(R.id.ProgrammingButton);
serviceButton.setOnClickListener(buttonListener);
orderButton.setOnClickListener(buttonListener);
programmingButton.setOnClickListener(buttonListener);
}
private OnClickListener buttonListener = new OnClickListener() {
public void onClick(View v) {
String serviceType = null;
Intent i = new Intent(HelpDeskFront.this, Main.class);
if (v.getId() == R.id.serviceButton)
serviceType = "service";
else if (v.getId() == R.id.OrderButton)
serviceType = "order";
else if (v.getId() == R.id.ProgrammingButton)
serviceType = "programming";
i.putExtra("serviceType", serviceType);
startActivityForResult(i, Intent.FILL_IN_DATA);
};
}
Buttons lead to my second activity:
package com.Android.HelpDeskMobileApp;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class Main extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button send = (Button)findViewById(R.id.sendRequest);
send.setOnClickListener(buttonListener);
}
private OnClickListener buttonListener = new OnClickListener() {
ArrayList<NameValuePair> data = new ArrayList<NameValuePair>(5);
final EditText caller = (EditText) findViewById(R.id.CallerEnter),
callExt = (EditText) findViewById(R.id.CallNumberEnter),
computerName = (EditText) findViewById(R.id.ComputerNameEnter),
location = (EditText) findViewById(R.id.LocationEnter),
request = (EditText) findViewById(R.id.RequestEnter);
public void onClick(View v) {
Intent i = getIntent();
final String serviceType = i.getStringExtra("serviceType");
Intent intent = new Intent(Main.this, HelpDeskEnd.class);
final String[] email = {"target emails"};
data.add(new BasicNameValuePair("Caller: ", textToString(caller)));
data.add(new BasicNameValuePair("Call Ext: ", textToString(callExt)));
data.add(new BasicNameValuePair("Computer Name: ", textToString(computerName)));
data.add(new BasicNameValuePair("Locations: ", textToString(location)));
data.add(new BasicNameValuePair("Request: ", textToString(request)));
sendData(data);
String body = data.get(0).toString() + " " + data.get(1).toString() + " " +
data.get(2).toString() + " " + data.get(3).toString() + " " +
data.get(4).toString();
Mail mail = new Mail("an email", "email password");
mail.setTo(email);
mail.setBody(body);
mail.setFrom("an email");
mail.setSubject(serviceType);
try {
mail.send();
}
catch (Exception e) {
Log.e("Send Mail", e.getMessage(), e);
}
intent.putExtra("serivceType", serviceType);
startActivity(intent);
}
};
private String textToString(EditText x)
{
return x.getText().toString();
}
private void sendData(ArrayList<NameValuePair> data)
{
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("https//www.awebsite.com/phpfile.php");
httpPost.setEntity(new UrlEncodedFormEntity(data));
HttpResponse response = httpclient.execute(httpPost);
Log.i("postData", response.getStatusLine().toString());
}
catch (Exception e){
Log.e("log_tag", "Error: " + e.toString());
}
}
}
This is probably some really easy fix. Thanks for any help. Here is my manifest file also I don’t know if its helpful but here it is:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.Android.HelpDeskMobileApp"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/logo" android:label="@string/app_name">
<activity android:name=".HelpDeskFront"
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:label="@string/app_name"
android:name=".Main">
<intent-filter></intent-filter>
</activity>
<activity android:label="@string/app_name"
android:name=".HelpDeskEnd">
<intent-filter></intent-filter>
</activity>
</application>
</manifest>
The error happens when I hit the button to go from the first activity to the .main activity. I have tried commenting out different parts of the code but I cannot figure out what is causing the Null Pointer Exception. Thanks.
log cat:
07-13 18:37:29.833: ERROR/AndroidRuntime(770): FATAL EXCEPTION: main
07-13 18:37:29.833: ERROR/AndroidRuntime(770): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.Android.HelpDeskMobileApp/com.Android.HelpDeskMobileApp.Main}: java.lang.NullPointerException
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1672)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.app.ActivityThread.access$1500(ActivityThread.java:122)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.os.Handler.dispatchMessage(Handler.java:99)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.os.Looper.loop(Looper.java:132)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.app.ActivityThread.main(ActivityThread.java:4025)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at java.lang.reflect.Method.invokeNative(Native Method)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at java.lang.reflect.Method.invoke(Method.java:491)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at dalvik.system.NativeStart.main(Native Method)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): Caused by: java.lang.NullPointerException
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.app.Activity.findViewById(Activity.java:1744)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at com.Android.HelpDeskMobileApp.Main$1.<init>(Main.java:35)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at com.Android.HelpDeskMobileApp.Main.<init>(Main.java:31)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at java.lang.Class.newInstanceImpl(Native Method)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at java.lang.Class.newInstance(Class.java:1301)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1663)
07-13 18:37:29.833: ERROR/AndroidRuntime(770): ... 11 more
It’s line 34 in Main. The lines under “Caused by” in the logcat output are where the relevant info usually is.
Okay, culprit should be the initializers
occurring in the Object constructor. Since the
onClickListenerconstructor will run before theonCreate()method,getIntent()will return null, and you will not have set your contentView so all your findViewById()’s will also return null.The correct way would be: