Java 向其他活动发送数据后,意图对象显示null
我在通过Java 向其他活动发送数据后,意图对象显示null,java,android,Java,Android,我在通过Intent发送数据时遇到问题 假设我有两项活动: 个人信息 文献信息 我正在做的事情:当用户填写所有给定的编辑文本字段并单击保存时,我通过intent将所有数据发送到第三个活动,现在用户正在文档活动中,输入数据并单击保存,数据被传输到第三个活动 问题出在第三个活动中:我只获取基于最新活动的数据-我的意思是,如果用户先输入个人信息,然后输入文档信息,我只获取双文档活动的数据,反之亦然 我正在构建一个应用程序,可以从用户那里获取数据,并将其显示在pdf文件中 个人信息活动: public
Intent
发送数据时遇到问题
假设我有两项活动:
public void getting_data_from_fields_and_sending_on_click_listner () {
radio_Group_Martial_Status.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
RadioButton radioButton = (RadioButton) findViewById(checkedId);
martial_status = radioButton.getText().toString() ;
}
});
Intent sendingData = new Intent (Personal_Information_Activity.this , Selecting_Activity.class);
sendingData.putExtra("FirstName" , fullName.getText().toString() );
sendingData.putExtra("Born" , born.getText().toString() );
sendingData.putExtra("Nationality" , nationality.getText().toString() );
sendingData.putExtra("CurrentPlace" , currentPlace.getText().toString() );
sendingData.putExtra("Address" , address.getText().toString() );
sendingData.putExtra("PhoneNumber" , phoneNumber.getText().toString() );
sendingData.putExtra("EmailAddress" , emailAddress.getText().toString() );
sendingData.putExtra("SelfIntro" , selfIntro.getText().toString() );
sendingData.putExtra("Day" , day.getSelectedItem().toString());
sendingData.putExtra("Month" , month.getSelectedItem().toString() );
sendingData.putExtra("Year" , year.getSelectedItem().toString() );
sendingData.putExtra("MartialStatus" , martial_status);
startActivity(sendingData);
}
SharedPreferences pref;
SharedPreferences.Editor editor;
pref = (this.getApplicationContext()).getSharedPreferences("USER_DATA", MODE_PRIVATE);
editor = pref.edit();
editor.putBoolean("login_status", true);
editor.putString("CODE", "" + String.valueOf(obj.get("code")));
editor.putString("NAME", "" + String.valueOf(obj.get("message")));
editor.putString("USER_ID", "" + String.valueOf(obj.get("user id")));
editor.commit();
SharedPreferences pref;
SharedPreferences.Editor editor;
pref = (this.getApplicationContext()).getSharedPreferences("USER_DATA", MODE_PRIVATE);
editor.putString("ADDRESS", "" + String.valueOf(obj.get("message")));
editor.putString("PHONE", "" + String.valueOf(obj.get("user id")));
editor.commit();
单据信息活动
private void getting_data_from_fields_and_sending_on_click_listner() {
Intent sendingData = new Intent (Documentation_Activity.this , Selecting_Activity.class);
String passportIssueDate = passportIssueM.getSelectedItem().toString()+"-"+passportIssueY.getSelectedItem().toString();
String idCardIssueDate = idIssueM.getSelectedItem().toString()+"-"+idIssueY.getSelectedItem().toString();
String licenceIssueDate = licenceIssueM.getSelectedItem().toString()+"-"+licenceIssueY.getSelectedItem().toString();
String passportExpiryDate = passportExpiryM.getSelectedItem().toString()+"-"+passportExpiryY.getSelectedItem().toString();
String idCardExpiryDate = idExpiryM.getSelectedItem().toString()+"-"+idExpiryY.getSelectedItem().toString();
String licenceExpiryDate = licenceExpiryM.getSelectedItem().toString()+"-"+licenceExpiryY.getSelectedItem().toString();
sendingData.putExtra("PassportNumeber" , passportNumber.getText().toString());
sendingData.putExtra("IdCard" , idCardNumber.getText().toString());
sendingData.putExtra("Licence" , licenceNumebr.getText().toString());
sendingData.putExtra("PID" , passportIssueDate);
sendingData.putExtra("PED" , passportExpiryDate);
sendingData.putExtra("IID" , idCardIssueDate);
sendingData.putExtra("IED" , idCardExpiryDate);
sendingData.putExtra("LID" , licenceIssueDate);
sendingData.putExtra("LED" , licenceExpiryDate);
startActivity(sendingData);
}
public void gettingInfoFromTheDocumentationalInformationActivity() {
passportNumber = getInformation.getStringExtra("PassportNumeber");
passportIssue = getInformation.getStringExtra("PID");
passportExpiry = getInformation.getStringExtra("PED");
idNumebr = getInformation.getStringExtra("IdCard");
idIssue = getInformation.getStringExtra("IID");
idExpiry = getInformation.getStringExtra("IED");
licenceNumebr = getInformation.getStringExtra("Licence");
licenceIssue = getInformation.getStringExtra("LID");
licenceExpiry = getInformation.getStringExtra("LED");
}
public void gettingInfoFromThePersonalInformationActivity() {
fullName = getInformation.getStringExtra("FirstName");
born = getInformation.getStringExtra("Born");
nationality = getInformation.getStringExtra("Nationality");
currentLocation = getInformation.getStringExtra("CurrentPlace");
address = getInformation.getStringExtra("Address");
emailAddress = getInformation.getStringExtra("EmailAddress");
selfInfo = getInformation.getStringExtra("SelfIntro");
phoneNumber = getInformation.getStringExtra("PhoneNumber");
day = getInformation.getStringExtra("Day");
month = getInformation.getStringExtra("Month");
year = getInformation.getStringExtra("Year");
martialStatus = getInformation.getStringExtra("MartialStatus");
}
private void createPdf() throws FileNotFoundException, DocumentException
{
Document document = new Document(PageSize.A4);
String output = Environment.getExternalStorageDirectory()+"/mypdf.pdf";
PdfWriter.getInstance(document, new FileOutputStream(output));
document.open();
document.add(new Paragraph("Name : " +fullName));
document.add(new Paragraph("Date of Birth : "+ day+"-"+month+"-"+year));
document.add(new Paragraph("Birth Place : " +born));
document.add(new Paragraph("Nationality : " + nationality));
document.add(new Paragraph("Current Place : " +currentLocation));
document.add(new Paragraph("Martial Status : " + martialStatus));
document.add(new Paragraph("Address : " + address));
document.add(new Paragraph("Phone Number : " +phoneNumber));
document.add(new Paragraph("Email : " + emailAddress));
document.add(new Paragraph("Self Introduction : " + selfInfo));
document.add(new Paragraph("__________________________________"));
document.add(new Paragraph("Passport Number : " + passportNumber));
document.add(new Paragraph("Issue Date : " +passportIssue));
document.add(new Paragraph("Expiry Date : " + passportExpiry));
document.add(new Paragraph("ID Card Number : " + idNumebr));
document.add(new Paragraph("Issue Date : " +idIssue));
document.add(new Paragraph("Expiry Date : " + idExpiry));
document.add(new Paragraph("Licence Number : " + licenceNumebr));
document.add(new Paragraph("Issue Date : " +licenceIssue));
document.add(new Paragraph("Expiry Date : " + licenceExpiry));
document.close();
}
第三项活动
private void getting_data_from_fields_and_sending_on_click_listner() {
Intent sendingData = new Intent (Documentation_Activity.this , Selecting_Activity.class);
String passportIssueDate = passportIssueM.getSelectedItem().toString()+"-"+passportIssueY.getSelectedItem().toString();
String idCardIssueDate = idIssueM.getSelectedItem().toString()+"-"+idIssueY.getSelectedItem().toString();
String licenceIssueDate = licenceIssueM.getSelectedItem().toString()+"-"+licenceIssueY.getSelectedItem().toString();
String passportExpiryDate = passportExpiryM.getSelectedItem().toString()+"-"+passportExpiryY.getSelectedItem().toString();
String idCardExpiryDate = idExpiryM.getSelectedItem().toString()+"-"+idExpiryY.getSelectedItem().toString();
String licenceExpiryDate = licenceExpiryM.getSelectedItem().toString()+"-"+licenceExpiryY.getSelectedItem().toString();
sendingData.putExtra("PassportNumeber" , passportNumber.getText().toString());
sendingData.putExtra("IdCard" , idCardNumber.getText().toString());
sendingData.putExtra("Licence" , licenceNumebr.getText().toString());
sendingData.putExtra("PID" , passportIssueDate);
sendingData.putExtra("PED" , passportExpiryDate);
sendingData.putExtra("IID" , idCardIssueDate);
sendingData.putExtra("IED" , idCardExpiryDate);
sendingData.putExtra("LID" , licenceIssueDate);
sendingData.putExtra("LED" , licenceExpiryDate);
startActivity(sendingData);
}
public void gettingInfoFromTheDocumentationalInformationActivity() {
passportNumber = getInformation.getStringExtra("PassportNumeber");
passportIssue = getInformation.getStringExtra("PID");
passportExpiry = getInformation.getStringExtra("PED");
idNumebr = getInformation.getStringExtra("IdCard");
idIssue = getInformation.getStringExtra("IID");
idExpiry = getInformation.getStringExtra("IED");
licenceNumebr = getInformation.getStringExtra("Licence");
licenceIssue = getInformation.getStringExtra("LID");
licenceExpiry = getInformation.getStringExtra("LED");
}
public void gettingInfoFromThePersonalInformationActivity() {
fullName = getInformation.getStringExtra("FirstName");
born = getInformation.getStringExtra("Born");
nationality = getInformation.getStringExtra("Nationality");
currentLocation = getInformation.getStringExtra("CurrentPlace");
address = getInformation.getStringExtra("Address");
emailAddress = getInformation.getStringExtra("EmailAddress");
selfInfo = getInformation.getStringExtra("SelfIntro");
phoneNumber = getInformation.getStringExtra("PhoneNumber");
day = getInformation.getStringExtra("Day");
month = getInformation.getStringExtra("Month");
year = getInformation.getStringExtra("Year");
martialStatus = getInformation.getStringExtra("MartialStatus");
}
private void createPdf() throws FileNotFoundException, DocumentException
{
Document document = new Document(PageSize.A4);
String output = Environment.getExternalStorageDirectory()+"/mypdf.pdf";
PdfWriter.getInstance(document, new FileOutputStream(output));
document.open();
document.add(new Paragraph("Name : " +fullName));
document.add(new Paragraph("Date of Birth : "+ day+"-"+month+"-"+year));
document.add(new Paragraph("Birth Place : " +born));
document.add(new Paragraph("Nationality : " + nationality));
document.add(new Paragraph("Current Place : " +currentLocation));
document.add(new Paragraph("Martial Status : " + martialStatus));
document.add(new Paragraph("Address : " + address));
document.add(new Paragraph("Phone Number : " +phoneNumber));
document.add(new Paragraph("Email : " + emailAddress));
document.add(new Paragraph("Self Introduction : " + selfInfo));
document.add(new Paragraph("__________________________________"));
document.add(new Paragraph("Passport Number : " + passportNumber));
document.add(new Paragraph("Issue Date : " +passportIssue));
document.add(new Paragraph("Expiry Date : " + passportExpiry));
document.add(new Paragraph("ID Card Number : " + idNumebr));
document.add(new Paragraph("Issue Date : " +idIssue));
document.add(new Paragraph("Expiry Date : " + idExpiry));
document.add(new Paragraph("Licence Number : " + licenceNumebr));
document.add(new Paragraph("Issue Date : " +licenceIssue));
document.add(new Paragraph("Expiry Date : " + licenceExpiry));
document.close();
}
您不能使用
intent
将数据发送到FirstActivity
到ThirdActivity
,您可以通过意图将数据发送到FirstActivity
到SecondActivity
。您必须再次在SecondActivity
上获取数据,并且必须再次将数据发送到ThirdActivity
,否则您将获得空数据
解决方案1:您可以创建一个常量类并将数据存储在常量类上,然后从常量类获取数据,或者,创建一个POJO类并将数据设置为POJO并使其可序列化将POJO类发送到下一个活动
参考代码:
public class Constants {
public static ArrayList<LoadDataResult> data = new ArrayList<LoadDataResult>();
}
SecondActivity.java:
public void getting_data_from_fields_and_sending_on_click_listner () {
radio_Group_Martial_Status.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
RadioButton radioButton = (RadioButton) findViewById(checkedId);
martial_status = radioButton.getText().toString() ;
}
});
Intent sendingData = new Intent (Personal_Information_Activity.this , Selecting_Activity.class);
sendingData.putExtra("FirstName" , fullName.getText().toString() );
sendingData.putExtra("Born" , born.getText().toString() );
sendingData.putExtra("Nationality" , nationality.getText().toString() );
sendingData.putExtra("CurrentPlace" , currentPlace.getText().toString() );
sendingData.putExtra("Address" , address.getText().toString() );
sendingData.putExtra("PhoneNumber" , phoneNumber.getText().toString() );
sendingData.putExtra("EmailAddress" , emailAddress.getText().toString() );
sendingData.putExtra("SelfIntro" , selfIntro.getText().toString() );
sendingData.putExtra("Day" , day.getSelectedItem().toString());
sendingData.putExtra("Month" , month.getSelectedItem().toString() );
sendingData.putExtra("Year" , year.getSelectedItem().toString() );
sendingData.putExtra("MartialStatus" , martial_status);
startActivity(sendingData);
}
SharedPreferences pref;
SharedPreferences.Editor editor;
pref = (this.getApplicationContext()).getSharedPreferences("USER_DATA", MODE_PRIVATE);
editor = pref.edit();
editor.putBoolean("login_status", true);
editor.putString("CODE", "" + String.valueOf(obj.get("code")));
editor.putString("NAME", "" + String.valueOf(obj.get("message")));
editor.putString("USER_ID", "" + String.valueOf(obj.get("user id")));
editor.commit();
SharedPreferences pref;
SharedPreferences.Editor editor;
pref = (this.getApplicationContext()).getSharedPreferences("USER_DATA", MODE_PRIVATE);
editor.putString("ADDRESS", "" + String.valueOf(obj.get("message")));
editor.putString("PHONE", "" + String.valueOf(obj.get("user id")));
editor.commit();
MainActivity.java:当您想要获取所有数据时
SharedPreferences pref;
SharedPreferences.Editor editor;
pref = (this.getApplicationContext()).getSharedPreferences("USER_DATA", MODE_PRIVATE);
String name = pref.getString("NAME", "");
String userId = pref.getString("USER_ID", "");
String address = pref.getString("ADDRESS", "");
String phone= pref.getString("PHONE", "");
只需发送包含每个活动中所有数据的pojo即可解决此问题。您只需要将pojo从一个活动传递到另一个活动 您需要创建如下pojo:
public class Info implements Serializable {
private String firstName;
private String born;
private String nationality;
//etc ...
// Data from another activity:
private String passportNumber;
private String idCard;
private String license;
//etc ...
// Data from another activity:
// etc ...
// Constructor
// Setter and Getter
}
然后,您可以通过以下方式发送数据意图:
public void getting_data_from_fields_and_sending_on_click_listner () {
Intent sendingData = new Intent (Personal_Information_Activity.this , Selecting_Activity.class);
Info info = new Info();
info.setFirstName(fullName.getText().toString());
info.setBorn(born.getText().toString());
info.setNationality(nationality.getText().toString());
// etc
// Then attach the data to intent.
sendingData.putExtra("info" , info);
startActivity(sendingData);
}
然后,您可以通过以下方式在另一个活动中获取数据信息:
private Info mInfo;
@Override
public void onCreate(Bundle savedInstanceState) {
...
Intent intent = getIntent();
mInfo = (Info) intent.getSerializableExtra("info");
...
}
然后再次将数据设置为Infopojo:
private void getting_data_from_fields_and_sending_on_click_listner() {
Intent sendingData = new Intent (Documentation_Activity.this , Selecting_Activity.class);
mInfo.setPassportNumber(passportNumber.getText().toString());
mInfo.setIdCard(idCardNumber.getText().toString());
mInfo.setLicense(licenceNumebr.getText().toString());
// etc ...
sendingData.putExtra("info" , mInfo);
startActivity(sendingData);
}
使用上述所有代码,您可以避免因记住所有的额外的键而头痛。您还只需要为所有活动维护一个对象,即Info对象。首先,我不需要这段代码就可以看出您对异步代码和回调如何工作的假设是错误的。您仅在单击回调中分配
军事状态
,但在单击处理之外使用它。不管怎样,我想看一个例子来确认我没有遗漏任何东西。这里的getInformation
是什么?我假设“getInformation”是意图,你在哪里声明它?意图getInformation=getIntent()@adm即使我删除了该代码块,即无线电组状态。。还有一个问题@M.Prokhorov..实际上它只是将intent设置为null,正如我提到的最新活动条件。。顺便说一句,谢谢你的时间,我只是自己制定了这个,你不能把数据链在一起,你每次都在覆盖,要么拉和传递旧数据,要么用新数据传递旧数据,要么以另一种方式存储。更好的解决方案是将数据发送到第二个活动,在第二个活动中获取数据,然后同时发送(第一个和第二个活动)数据到第三个活动。实际上我没有2个活动,我有8个Activities@SaadZahoor,当用户在您想要的内容之后在EditText上填写数据时,您能解释一下它的简单用户转到第一个活动并填写数据,然后点击save in save(保存)按钮,数据将转到主活动。当用户点击save(保存)时,用户将返回到活动列表(即主要活动)如添加个人信息、添加经验、添加爱好(这些都是不同的活动)现在用户进入每个活动并添加信息并点击回车键(数据进入主要活动)用户返回到主活动>。在主活动中,我有一个使用itext生成pdf的按钮。这就是我想做的。陷入问题时,我会困惑我应该将构造函数设置为空还是传递一些东西。就像我同时使用intent和constructor一样??通常,我使用默认构造函数。但是在def中ault构造函数,我正在设置所有初始值,类似于public Info(){this.firstName=“”;this.born=“”;this.national=“”;//etc}
所以我们有了对象的默认值。我真的很感激这一点,但我的问题仍然存在,无论我使用这种技术还是我正在使用的技术……数据只是替换,我得到了最新的数据,我不知道如何解释……我只得到了一个数据,或者我可以说数据来自一个活动,而不是多个活动::我尝试了代码wWorks和我的一样好,但我过去只通过意图发送数据。问题不在于发送数据。如果我只使用一个活动并将数据发送到另一个活动来创建pdf,工作正常。但是每当我从多个活动发送数据时,我只会收到一个活动数据,其余的都为空::您是否按以下顺序发送数据:FirstActivity->SecondActivity->ThirdActivity->FourthActivity->……?如果使用订单发送数据,则需要在第一个activity中首先创建pojo对象。对于剩余的activity,您需要继续使用该对象,并且只更改相关数据的值。不要创建该对象。