Android: Adding more than one Bundle to a new activity - android

I'm trying to pass in two separate pieces of information to a new activity in my Android application.
I currently have this:
Bundle dataBundle = new Bundle();
Bundle extras = getIntent().getExtras(); // student id
dataBundle.putInt("id", 0);// lesson id
Intent intent = new Intent(getApplicationContext(),com.example.ltss.dyslexia.app.LessonNotes.class);
intent.putExtras(dataBundle);
intent.putExtras(extras);
startActivity(intent);
I then have the code accessing this information. However, adding the second bundle overrides the first one.
Bundle extras = getIntent().getExtras();
Bundle studentId = getIntent().getExtras();
Log.d("LessonID: ", String.valueOf(extras));
Log.d("StudentID: ", String.valueOf(studentId));
I need to have the information passed in separately as I need to check if one of them is null.
Can what i'm asking be done? Any ideas as to how to do this? Or another way to do this? (parsing maybe?)
Thanks

you could use putExtra("bundle1", bundle1) and putExtra("bundle2", bundle2) and then use getIntent().getBundleExtra("bundle1"); and getIntent().getBundleExtra("bundle2"); to retrieve both

Maybe you're over thinking this. You can put a ton of information in 1 bundle.
Bundle bundle = new Bundle();
bundle.putString("studentid", "Student0983");
bundle.putInt("lessonid", 0);
bundle.putString("moreinfo", "needed some extra data on that student");
bundle.putInt("studentincome", 4250);
Intent intent = new Intent(getApplicationContext(),com.example.ltss.dyslexia.app.LessonNotes.class);
intent.putExtras(bundle);
startActivity(intent);
Now to get that data in the new activity
Bundle bundle = getIntent().getExtras();
Log.d("studentid: ", bundle.getString("studentid"));
Log.d("lessonid: ", bundle.getInt("lessonid"));
Log.d("moreinfo: ", bundle.getString("moreinfo"));
Log.d("studentincome: ", bundle.getInt("studentincome"));

Related

get information from 2 table in sqlite from 2 different fragment

I have 2 tables : book and user ,now I need to make another table but it should get some fields from book and some from user ,separately I can ,but when I go to another fragment to get other fields from book table the username ,which I save it to a string, returns null
08-04 10:47:27.319 4004-4004/com.example.pars.amanatdari I/bookName: args : Bundle[{status=null, userName=jack, bookName=null}]
08-04 10:47:30.139 4004-4004/com.example.pars.amanatdari I/bookName: args : Bundle[{status=available, userName=null, bookName=نون والقلم}]
what should I do exactly?I dont know even what to search
send data from fragment :
Bundle args = getArguments();
String username = args.getString("userName");
and get data :
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String bookName = bundle.getString("bookName");
String bookStatus = bundle.getString("status");
String bookUser = bundle.getString("userName");
borrowFragment borrowFragment = new borrowFragment();
Bundle args2 = new Bundle();
args2.putString("bookName", bookName);
args2.putString("status", bookStatus);
args2.putString("userName", bookUser);
Log.i("bookName", "args : " + args2);
borrowFragment.setArguments(args2);
getSupportFragmentManager().beginTransaction().add(R.id.frg_container, borrowFragment, "tag").commit();
That is bound to happen , since the bundle gets null or overwritten after your visit to the book fragment .So what can be done is you can get the values from user fragment and pass the value to book fragment and then take both the values and go to the next fragment . You have to carry the data with you all the while

Passing Value from string.xml from one Fragment to another activity?

The value in string.xml file is.
<string name="hello_blank_fragment">Hello blank fragment</string>
From this Fragment i am trying to pass value to another activity ... by using putextra
i=new Intent(Basic.this.getContext(),DisplayBasicData.class);
i.putExtra("header", R.string.action_settings);
startActivity(i);
Then i try to get value using
String text_point = getIntent().getStringExtra("header");
But it not getting the value.
Try use Bundle :
Bundle extras = new Bundle();
extras.putString("header", getResources().getString(R.string.action_settings));
i=new Intent(Basic.this.getContext(),DisplayBasicData.class);
i.putExtras(extras);
startActivity(i);
and extract in DisplayBasicData activity:
String text_point = getIntent().getExtras().getString("header");
You are sending resource id ,not string
Here you can get string in two ways :
First way:
i.putExtra("header", R.string.action_settings);
int text_pointResourceId = getIntent().getIntExtra("header");
String text_point = getResources().getString(text_pointResourceId)
secondWay:
i.putExtra("header", getResources().getString(R.string.action_settings));
String text_point = getIntent().getStringExtra("header");
Hope it helps
Instead of sending data directly , it is better to use Bundle
you can pass that string simply in following way, no need of putting data in bundle.
Intent intent = new Intent(getActivity(), DisplayBasicData.class);
String myText = getActivity().getResources().getString(R.string.action_settings);
intent.putExtra("header", myText);
startActivity(intent);
then you can retrieve that data by using
String text_header = getIntent().getStringExtra("header");

Sending a double data value from one application to another application in android

I want to send a double value data from one application to another. I have created 2 applications, the one application will send latitude and longitude (both double value) to another application on every 10 mins.I have used service for it. And second application will just get these values and it will show to user. Can you just give me a little example for passing the double value
Thank you
I suggest you create a variable which contains all the information.
Then use
Intent i = new Intent(getApplicationContext(), NewActivity.class);
i.putExtra("new_variable_name","value");
startActivity(i);
Then in the new Activity, retrieve those values:
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("new_variable_name");
}
i found the answer here
EDIT :
it also works with double doubleVal1 & 2 being your variables
Intent yourIntent = new Intent(thisActivity.this, nextActivity.class);
Bundle b = new Bundle();
b.putDouble("latitude", doubleVal1);
b.putDouble("longitude", doubleVal2);
yourIntent.putExtras(b);
startActivity(yourIntent);
Then, get it in your next Activity:
Bundle b = getIntent().getExtras();
double mLatitude = b.getDouble("latitude");
double mLongitude =b.getDouble("longitude);"`
it cames from this question pass double values in intent

Anyway to have more than one extra added to intent?

I want to have more than one extra added to Intent. One to hold a double and one to hold long. Is this possible?
If so, how would I do it and how would I get the information from each extra?
You can add as many extras to an Intent as your heart desires, they are all just key value data:
Intent intent = new Intent();
intent.putExtra("name", "MyName");
intent.putExtra("age", 35);
intent.putExtra("weight", 155.6);
And they can be retrieved using the same key names:
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 0);
double weight = intent.getDoubleExtra("weight", 0.0);
intent.putExtra(#ExtraDoubleKey, #ExtraDoubleValue);
intent.putExtra(#ExtraLongKey, #ExtraLongValue);
Where #ExtraDoubleKey is a string that you will use to access the extra (i.e. "price" or something), and #ExtraDoubleValue is the value of the extra (the double variable you wish to pass). Similarly for #ExtraLongKey and #ExtraLongValue.
Then to access the extras in your next activity you can use:
double doubleValue = getIntent().getExtras().getDouble(#ExtraDoubleKey);
long longValue = getIntent().getExtras().getLong(#ExtraLongKey);
to get the value of the double extra with the key #ExtraDoubleKey.
https://stackoverflow.com/a/11461530/776075
Devunwired is correct.
But the way i see is
you can keep only one value per Type.
Like one string, one int, one double etc..
You are not capable of containing 2 string values. or two integers.
I have experienced this on a program and i have overcome it by using
one string and one Boolean.
You can use Bundle and pass it as a parameter to the Intent.
Intent nextActivity = new Intent(this, Activity2.class);
Bundle passData = new Bundle(); //to hold your data
passDataBndl.putString("fname", fname); //put in some String. the first parameter to it is the id, and the second parameter is the value
nextActivity.putExtras(passDataBndl); //Add bundle to the Intent
startActivityForResult(nextActivity, 0); //Start Intent

NullPointerException from getIntent().getExtras().getString("to")

InboxDetailActivity.java:
Intent i = new Intent(InboxDetailActivity.this,Compose.class);
Bundle b = new Bundle();
b.putString("To", ConstantData.inbox_from);
Log.d("From Value", ConstantData.inbox_from);
b.putString("Subject", "RE:" + ConstantData.inbox_subject);
Log.d("Subject Value", ConstantData.inbox_subject);
b.putString("FromId", ConstantData.inbox_fromid);
Log.d("From Id Value",ConstantData.inbox_fromid);
i.putExtras(b);
startActivity(i);
Compose.java:
Intent i = getIntent();
Bundle b = i.getExtras();
to = b.getString("To");
subject = b.getString("Subject");
toId = b.getString("FromId");
I am getting NullPointerException at to = b.getString("To");
Bundle b = i.getExtras();
getExtras() returns null.
Agree with John's answer adding possible solution.
What you are doing is create a bundle , insert values in this and then pass this bundle.
And than you just fetch all the values one by one using its keys.
I am working with bundles but I simply add desired values directly using putExtra method. And I haven't got any problem till date. I recommend you to use put extra and check whether it works or not.
I would like to know what makes you to apply this way for bundles? Have you just read it somewhere and started applying this method ? or you have got some options and after some consideration you found it better to apply this method OR your requirement states that. Because normally me and my peers doesn't use bundles and directly pass the extras. And that works for me every time.
using this instead of bundle
i.putString("To", ConstantData.inbox_from);
Log.d("From Value", ConstantData.inbox_from);
i.putString("Subject", "RE:" + ConstantData.inbox_subject);
Log.d("Subject Value", ConstantData.inbox_subject);
i.putString("FromId", ConstantData.inbox_fromid);
Log.d("From Id Value",ConstantData.inbox_fromid);
and in another class..
to = getIntent().getString("To");

Categories

Resources