[英]Intent Object show null After sending data to other activity
I am facing problem while sending data through Intent
. 通过Intent
发送数据时遇到问题。
Let's say I have two Activities : 假设我有两个活动:
Personal Information 个人信息
Documentational Information. 文档信息。
What I am doing: When user fills all the given edit text fields and clicks save I send all the data through intent to the 3rd activity and now user is in the documentational activity, enters data and hits save, and data is transferred to the 3rd Activity. 我正在做什么:当用户填写所有给定的编辑文本字段并单击“保存”时,我会通过意图将所有数据发送到第三个活动,现在用户处于文档活动中,输入数据并点击保存,然后将数据传输到第三个活动活动。
The problem is in the 3rd Activity : I only get data based on the latest activity - I mean if user first enters personal info and then documentational info, I only get data of doucumentational activity and vice versa. 问题出在第三活动中 :我仅基于最新活动获取数据-我的意思是,如果用户首先输入个人信息,然后输入文档信息,则我只会获取重复活动的数据,反之亦然。
I am building an app that can get data from the user and show it in a pdf file 我正在构建一个可以从用户那里获取数据并将其显示为pdf文件的应用程序
personal info activity : 个人信息活动:
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);
}
doc info activity 文档信息活动
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);
}
3rd activity 第三活动
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();
}
You can't send data to FirstActivity
to ThirdActivity
by using intent
, You can send data to FirstActivity
to SecondActivity
by intent again you have to get the data on SecondActivity
and again have to send data to ThirdActivity
otherwise you will get null data . 你无法将数据发送到FirstActivity
到ThirdActivity
使用intent
,您可以将数据发送到FirstActivity
到SecondActivity
的意图再次你已经得到的数据SecondActivity
,并再次有数据发送到ThirdActivity
否则你将得到空数据。
Solution 1: Either you can create a Constant class and store data on constant class and get data from Constant class or, Create a POJO class and set Data to POJO and make it Serializable send POJO class to Next of your Activity. 解决方案1:您可以创建一个Constant类并将其存储在constant类上并从Constant类获取数据, 或者创建一个POJO类并将Data设置为POJO并使其可序列化,然后将POJO类发送给Activity的Next。
Reference Code : 参考代码 :
public class Constants {
public static ArrayList<LoadDataResult> data = new ArrayList<LoadDataResult>();
}
When you will get data from User by Edittext get and set to POJO which in Constant class and where do you want to get create reference and get data. 当您通过Edittext从User获取数据时,获取并设置为POJO,这在Constant类中,以及您想在哪里获取创建引用并获取数据。
Solution 2 : You have 8 Activities and you want to save all information and create PDF file from MainActivity.java 解决方案2:您有8个活动,并且想要保存所有信息并从MainActivity.java创建PDF文件。
Here is the solution : Use SharedPreference
to save Data , Save data from all of your different activities, and in Your MainActivity when you want just getData from SharePreference
, by using this also there is not chance of lost of Data. 这是解决方案:使用SharedPreference
保存数据,保存所有不同活动的数据,并且在MainActivity中,当您只希望从SharePreference
getData时,使用此方法也不会丢失数据。
FirstActivity.java : FirstActivity.java:
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();
SecondActivity.java : SecondActivity.java:
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 : When you want to get All Data 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", "");
You can solve the problem by simply send the pojo which contains all of the data in each activity. 您可以通过简单地发送包含每个活动中所有数据的pojo来解决问题。 You only need to pass to pojo from one activity to another activity. 您只需要将pojo从一个活动传递到另一个活动。
You need to create pojo to something like this: 您需要为以下内容创建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
}
Then you can send the data intent with: 然后,您可以通过以下方式发送数据意图:
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);
}
Then you get the data info in another activity with: 然后,您可以通过以下另一活动获得数据信息:
private Info mInfo;
@Override
public void onCreate(Bundle savedInstanceState) {
...
Intent intent = getIntent();
mInfo = (Info) intent.getSerializableExtra("info");
...
}
And set the data to the Info pojo again: 并再次将数据设置到Info pojo:
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);
}
With the all the above codes, you can safe yourself from headache for remembering all of the extra keys. 有了上述所有代码,您就可以记住所有额外的键,从而避免头痛。 You also only need to maintain one object, which is the Info object, for all of your activity. 您还只需为所有活动维护一个对象,即Info对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.