I have created an application with multiple activities, all were working fine, until i added an email activity, now the app crashes even without going to main activity. email activity send a recommendation of this app to your friends.
but i don't know what changes need to be made in the app manifest.
package com.example.androidhive;
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;
import android.widget.EditText;
public class mailactivity extends Activity{
Button mailsend;
Button mail;
EditText mailname;
EditText mailaddr;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mail);
mailsend = (Button) findViewById(R.id.mailsend);
mailname = (EditText) findViewById(R.id.mailname);
mailaddr = (EditText) findViewById(R.id.mailaddr);
mailsend.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String to = mailaddr.getText().toString();
String subject = mailname.getText().toString() + " refered an app";
String message = "Hey check out this cool app made my CIET students";
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{ to});
//email.putExtra(Intent.EXTRA_CC, new String[]{ to});
//email.putExtra(Intent.EXTRA_BCC, new String[]{to});
email.putExtra(Intent.EXTRA_SUBJECT, subject);
email.putExtra(Intent.EXTRA_TEXT, message);
//need this to prompts email client only
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));
}
});
}
}
main activity:
package com.example.androidhive;
import java.util.HashMap;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.example.androidhive.library.DatabaseHandler;
import com.example.androidhive.library.UserFunctions;
public class LoginActivity extends Activity {
Button btnLogin;
Button btnLinkToRegister;
Button mail;
EditText inputEmail;
EditText inputPassword;
TextView loginErrorMsg;
// JSON Response node names
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_UID = "uid";
private static String KEY_NAME = "name";
private static String KEY_EMAIL = "email";
private static String KEY_CREATED_AT = "created_at";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
// Importing all assets like buttons, text fields
inputEmail = (EditText) findViewById(R.id.loginEmail);
inputPassword = (EditText) findViewById(R.id.loginPassword);
btnLogin = (Button) findViewById(R.id.btnLogin);
btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
loginErrorMsg = (TextView) findViewById(R.id.login_error);
// Login button Click Event
btnLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String email = inputEmail.getText().toString();
String password = inputPassword.getText().toString();
UserFunctions userFunction = new UserFunctions();
Log.d("Button", "Login");
JSONObject json = userFunction.loginUser(email, password);
// check for login response
try {
if (json.getString(KEY_SUCCESS) != null) {
loginErrorMsg.setText("");
String res = json.getString(KEY_SUCCESS);
if(Integer.parseInt(res) == 1){
// user successfully logged in
// Store user details in SQLite Database
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
JSONObject json_user = json.getJSONObject("user");
// Clear all previous data in database
userFunction.logoutUser(getApplicationContext());
db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));
// Launch Dashboard Screen
Intent dashboard = new Intent(getApplicationContext(), DashboardActivity.class);
// Close all views before launching Dashboard
dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(dashboard);
// Close Login Screen
finish();
}else{
// Error in login
loginErrorMsg.setText("Incorrect username/password");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
// Link to Register Screen
btnLinkToRegister.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(),
RegisterActivity.class);
startActivity(i);
finish();
}
});
// link to mail screen
mail.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent j = new Intent(getApplicationContext(),
mailactivity.class);
startActivity(j);
finish();
}
});
}
}
manifest file:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:debuggable="true">
<activity
android:label="@string/app_name"
android:name=".DashboardActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Login Activity -->
<activity
android:label="Login Account"
android:name=".LoginActivity"></activity>
<!-- Register Activity -->
<activity
android:label="Register New Account"
android:name=".RegisterActivity"></activity>
<activity
android:label="Send email"
android:name=".mailactivity"></activity>
</application>
<!-- Allow to connect with internet -->
<uses-permission android:name="android.permission.INTERNET" />
Logcat output:
07-31 10:23:20.525: E/AndroidRuntime(1275): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidhive/com.example.androidhive.LoginActivity}: java.lang.NullPointerException
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.os.Handler.dispatchMessage(Handler.java:99)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.os.Looper.loop(Looper.java:137)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.app.ActivityThread.main(ActivityThread.java:5041)
07-31 10:23:20.525: E/AndroidRuntime(1275): at java.lang.reflect.Method.invokeNative(Native Method)
07-31 10:23:20.525: E/AndroidRuntime(1275): at java.lang.reflect.Method.invoke(Method.java:511)
07-31 10:23:20.525: E/AndroidRuntime(1275): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-31 10:23:20.525: E/AndroidRuntime(1275): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-31 10:23:20.525: E/AndroidRuntime(1275): at dalvik.system.NativeStart.main(Native Method)
07-31 10:23:20.525: E/AndroidRuntime(1275): Caused by: java.lang.NullPointerException
07-31 10:23:20.525: E/AndroidRuntime(1275): at com.example.androidhive.LoginActivity.onCreate(LoginActivity.java:111)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.app.Activity.performCreate(Activity.java:5104)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-31 10:23:20.525: E/AndroidRuntime(1275): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)