从两个不同的活动接收两个意图时出错。

时间:2016-07-13 12:22:23

标签: android android-intent

我试图从两个不同的活动中获得两个不同的意图。我在接收活动的OnCreate中尝试了以下方法:

 Intent intent1 = getIntent();
        if(intent1.getStringExtra("packagename").equals("com.example.kaad.calenderlearning.MainActivity")) {
            DateString = intent1.getStringExtra("DATE");
            try {
                DateFormat df = new SimpleDateFormat("MMM d,yyyy", Locale.ENGLISH);
                date = df.parse(DateString);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            DateTextView.setText(DateString);

            save = true;
            correctintent = false;
        }
        else
        {
            Bundle extras = getIntent().getExtras();
            if (extras != null)
            {
                rowID = extras.getLong("row_id");
                AppointmentsEditText.setText(extras.getString("title"));
                LocationNameEdit.setText(extras.getString("location"));
                AppointmentDoctorEdit.setText(extras.getString("doctor"));
                DateTextView.setText(extras.getString("date"));
            }
            if(getIntent().getExtras() == null)
            {
                save = true;
            }
            correctintent = true;
            save = false;
        }

当intentExtra出现在intent中时,它可以工作。但是,它没有转到else语句。相反,它显示以下错误:

  

java.lang.RuntimeException:无法启动活动   ComponentInfo {com.example.kaad.calenderlearning / com.example.kaad.calenderlearning.MakeAppointmentsActivity}:   java.lang.NullPointerException:尝试调用虚方法   ' boolean java.lang.String.equals(java.lang.Object)'在null对象上   参考

我研究过这个话题。但是我的项目中没有一个解决方案有效。我真的很感谢这个社区的帮助。

2 个答案:

答案 0 :(得分:0)

首先检查Intent是否包含包名! 如果包含然后只提取它, 如果不包含,那么它将执行你的其他部分。

Intent intent1 = getIntent();

    if(intent1.hasExtra("packagename")){
                   if(intent1.getStringExtra("packagename").equals("com.example.kaad.calenderlearning.MainActivity")) {
                DateString = intent1.getStringExtra("DATE");
                 try {
                    DateFormat df = new SimpleDateFormat("MMM d,yyyy", Locale.ENGLISH);
                    date = df.parse(DateString);
                } catch (ParseException e) {
                    e.printStackTrace();
                }

                DateTextView.setText(DateString);

                save = true;
                correctintent = false;
            }
    }//if(intent1.hasExtra("packagename")) closes here....
    else{
                Bundle extras = getIntent().getExtras();
                if (extras != null)
                {
                    rowID = extras.getLong("row_id");
                    AppointmentsEditText.setText(extras.getString("title"));
                    LocationNameEdit.setText(extras.getString("location"));
                    AppointmentDoctorEdit.setText(extras.getString("doctor"));
                    DateTextView.setText(extras.getString("date"));
                }
                if(getIntent().getExtras() == null)
                {
                    save = true;
                }
                correctintent = true;
                save = false;
    }

答案 1 :(得分:0)

您可以这样做以避免NullPointerException:

Intent intent1 = getIntent();
if ("com.example.kaad.calenderlearning.MainActivity".equals( intent1.getStringExtra("packagename")) {...}