onClick后的java空指针异常

标签 java android nullpointerexception

我正在编写一个应用程序,发送一封包含多个图像作为附件的电子邮件。我点击了这个链接:Android multiple email attachments using Intent设置电子邮件 Intent 和内容。但是当我单击发送按钮时应用程序强制关闭并且似乎存在空指针异常。

这是涉及的两个类的代码(仅针对电子邮件部分):

上一个邮件.java :

   public class PrevEmail extends Activity{

Context context;
TextView tv,tvEmail,tvEmailAd,tvSubject,tvContent,tvLocation;
EditText etSubject,etContent,etLocation;
String subject,content,location;
Button send;
String btnSelected;
String[] imgPath;
Bundle extras;
ArrayList<Uri> uris;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.prevemail);
    intializeVar();
}

private void intializeVar() {
    // Links xml to java
    tv = (TextView) findViewById(R.id.tv);
    tvEmail = (TextView) findViewById(R.id.tvEmail);
    tvEmailAd = (TextView) findViewById(R.id.tvEmailAd);
    tvSubject = (TextView) findViewById(R.id.tvSubject);
    tvContent = (TextView) findViewById(R.id.tvContent);
    tvLocation = (TextView) findViewById(R.id.tvLocation);

    etSubject = (EditText) findViewById(R.id.Subject);
    etContent = (EditText) findViewById(R.id.Content);
    etLocation= (EditText) findViewById(R.id.Location);

    send = (Button) findViewById(R.id.bSend);



    extras = getIntent().getExtras();
    if(extras!=null){
        btnSelected=extras.getString("Button");
        imgPath=extras.getStringArray("Path");

        //Sets the E-mail field according to the value received by the Bundle.
        if(btnSelected.equalsIgnoreCase("case1")){
            tvEmailAd.setText("email_address");
        }else if(btnSelected.equalsIgnoreCase("case2")){
            tvEmailAd.setText("email_address");
        }else if(btnSelected.equalsIgnoreCase("case3")){
            tvEmailAd.setText("email_address");
        }else if(btnSelected.equalsIgnoreCase("case4")){
            tvEmailAd.setText("email_address");
        }

    }   



    send.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            convertEditTextToString();
            Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
            emailIntent.setType("text/plain");
            emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,"email_address");
            emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,subject);
            emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,content);

            uris = new ArrayList<Uri>();

            for(String file : imgPath) {
                File fileIn = new File(file);
                Uri u = Uri.fromFile(fileIn);
                uris.add(u);
            }

            emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
            context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
        }
    });

}

    private void convertEditTextToString(){

        subject = etSubject.getText().toString();
        content = etContent.getText().toString();
        location= etLocation.getText().toString();
    }       
  }

Android list :

    <?xml version="1.0" encoding="utf-8"?>

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.name.StartScreen"
        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:name="com.example.name.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.example.name.MAINACTIVITY" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
     <activity
         android:name="com.example.name.PrevEmail"
         android:label="@string/app_name">     
     </activity>
</application>

还有 Logcat:

    12-02 21:44:48.180: W/dalvikvm(29329): threadid=1: thread exiting with uncaught   exception (group=0x40bc4498)
    12-02 21:44:48.180: E/test(29329): Exception
    12-02 21:44:48.200: E/AndroidRuntime(29329): FATAL EXCEPTION: main
    12-02 21:44:48.200: E/AndroidRuntime(29329): java.lang.NullPointerException
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at com.example.name.PrevEmail$1.onClick(PrevEmail.java:100)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at android.view.View.performClick(View.java:4106)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at  android.view.View$PerformClick.run(View.java:17150)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at android.os.Handler.handleCallback(Handler.java:615)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at android.os.Handler.dispatchMessage(Handler.java:92)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at android.os.Looper.loop(Looper.java:137)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at android.app.ActivityThread.main(ActivityThread.java:4792)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at java.lang.reflect.Method.invokeNative(Native Method)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at java.lang.reflect.Method.invoke(Method.java:511)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)
    12-02 21:44:48.200: E/AndroidRuntime(29329):    at dalvik.system.NativeStart.main(Native Method)

最佳答案

你从不初始化

Context context;

所以当执行 context.startActivity(Intent.createChooser(emailIntent, "Send mail...")); 时,它会抛出 NPE。

Logcat 消息对于调试非常有帮助。这一行:

at com.example.name.PrevEmail$1.onClick(PrevEmail.java:100)

表示在您的 Activity 的第 100 行(准确地说是在 onClick 方法内)有些东西没有正确初始化。

尝试从 logcat 中学习,这将为您节省很多时间。

关于onClick后的java空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20333137/

相关文章:

java - JMX - MBean 在应用程序部署时自动注册

java - Spring - Bean 创建中的 StackOverflowError

java - 调用 quit() 后无法使用 WebDriver FirefoxDriver

最后一次查看之前的Android Viewflipper黑屏

使用 scanner.hasNext() 时出现 Java NullPointerException;

java - setVisible(false) 为一组 JTextField 和 JLabel

android - 动态壁纸服务中的 min3D?

java - Crouton 库中的滚动文本

java.lang.NullPointerException : Can't pass null for argument 'pathString' in child() - Error Occurs in MessagesDbRef

java - ViewPager fragment 随着时间的推移而被破坏?