在向其添加邮件发送活动后,应用程序崩溃,是否需要进行任何清单更改?

时间:2014-07-31 10:16:41

标签: android email android-intent android-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 :"));

        }
    });
  }
}

主要活动:

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)

2 个答案:

答案 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();
  }

}