我创建了一个包含多个活动的应用程序,一切正常,直到我添加了一个电子邮件活动,现在即使没有进行主要活动,应用程序也会崩溃。电子邮件活动将此应用程序的推荐发送给您的朋友。
但我不知道应用程序清单中需要进行哪些更改。
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 :"));
}
});
}
}
主要活动:
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();
}
});
}
}
清单文件:
<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输出:
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)
答案 0 :(得分:0)
尝试在try catch块之间嵌套您的电子邮件意图,询问您是否还不清楚
您忘记导入按钮资源 添加mail =(按钮)findViewById(R.Id。“其中ur按钮位于”)
答案 1 :(得分:0)
Intent email = new Intent(Intent.ACTION_SEND);
email.setData(Uri.parse("mailto:"));
email.setType("text/plain");
email.putExtra(Intent.EXTRA_EMAIL,to);
email.putExtra(Intent.EXTRA_SUBJECT, subject);
email.putExtra(Intent.EXTRA_TEXT, message);
try {
startActivity(Intent.createChooser(email, "Choose an Email client :"));
finish();
Log.i("Finished sending email...", "");
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(mailactivity .this,
"There is no email client installed.", Toast.LENGTH_SHORT).show();
}
}