What is the easiest way to send an ArrayList<float[]> between activities?
Is it possible to send using SharedPreferences or putExtra?
I've only seen examples of sending ArrayList<String> or ArrayList<Int>, and those options are built in through .putStringArrayList etc.
The best way would be to add it as an extra to the Intent's Bundle. This is because Intent extras were created specifically to pass arguments between Activities.
Put Extra
ArrayList<float[]> list = new ArrayList<>();
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putExtra("arg_key", list);
Get Extra
ArrayList<float[]> list = ( ArrayList<float[]>) getIntent().getSerializableExtra("arg_key");
That said, if the data is to be persisted in a Database anyways, you would simply retrieve it from the database. I would not use SharedPreferences for this as it is intended for storing flags, tokens, app settings, etc.
UPDATE
If you want to pass an argument that is not supported by an Intent's extras and is not natively Serializable, have a look at Parcelable. You can implement Parcelable in any of your POJOs to allow them to be added to a Bundle. Parcelable is also faster than Serializable.
Related
In the Intent used to trigger an android.intent.action.CREATE_DOCUMENT action, I add a custom extra with myIntent.putExtra("myPackage.MY_EXTRA","toto").
In the onActivityResult function, when I try to retrieve this extra with intent.getStringExtra("myPackage.MY_EXTRA"), I get a null String (intent is the Intent received as a parameter in the onActivityResult function).
Any idea on how I could solve my problem?
What you want is not likely to be available for any startActivityForResult() call. Putting an extra on an Intent sends that extra to the other activity. There is no requirement for that extra to be returned to you, and few (if any) activities will do that.
So, hold onto the data yourself, such as in a field of your activity.
public void onClick(View v) {
String value="Pass this";
Intent i = new Intent(MainActivity.this,LoadActivity.class);
i.putExtra("KEY",value);
startActivity(i);
I have been using this way of sending info to new activity and wanted to know if I can use this same way but not go to new activity just save the String in case I wanted to save multiple things in one activity then go to the next.
Once any activity is closed the data can only come back in one of the 2 ways.
If you pass a Bundle to the onSaveInstanceState() method or if you use SharedPreferences.
The onSaveInstanceState() method is usually used to store information while the device configuration changes, for instance: the orientation of the device.
Use SharedPreferences if you want data to be persistent across the entire app. That data can then be accessed from whatever activity you're in.
This Guide from Google explains SharedPreferences in details.It's quite easy to implement too compared to onSaveInstanceState() because you don't have to worry about the activity lifecycle.
I am trying to send the string from one Activity to Another WITHOUT changing the CURRENT ACTIVITY. This my code I used:
Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("getFollowerNumberData", txt);
startActivity(intent);
Using this code bring me to the other activity or I do not want that. I just want to send this string without changing activity. I tried this one
Intent intent = new Intent();
But it is crashing my app. First of all it is possible to do so? If yes, how can I achieve that?
Edit: To be more clear, it works like follower and Following features in other apps or games. When you follow someone the number of the person you just followed goes up as well your Following number. Since my SignInPlayerProfile.Class(where the Following should go up to one too) is in another activity I was trying to get this information intent.putExtra("getFollowerNumberData, txt); from Main Activity and display that in the SignInPlayerPlayer by using text.setText(). But the Problem is by using intent = new Intent(this, AnotherActivity.class); it brings me to SignInPlayerProfile Activity which I do not like since
I am trying to send the string from one Activity to Another WITHOUT changing the CURRENT ACTIVITY(or simpler words WIHTOUT Going to the Other Activity).
Thanks for Help.
When an activity getting closed, according to it's life-cycle, it will be destroyed and no longer exists, when you start an activity it will be created and then it can get your data, so you can't send data to an destroyed activity which no longer exists
You can use Static Variables to communicate between activities (Classes), you can change value of a Static-Variable of an activity from another activity, but it's not a good option for data you need to be alive because Static Variables lives on Heap Memory and Heap will be freed if Android OS needs more Memory
Another way is to create a Message Handler in your first activity as a Static Variable and then send a Message to the Handler from second activity, see this example :
http://stacktips.com/tutorials/android/android-handler-example
I suggest you using SharedPreferences for saving your data in first activity and load from it on second activity
EDIT :
According to your edit, the "Number" you want to use in another Activity as "Following" or "Followers" is just needed when the second activity is visible, you should use sharedpreferences to save the "Number" and load from it when you need it. For example before text.settext() method you can load the number from sharedpreferences and then pass it to text.settext()
You should not save your data on the variables or classes and should save them on a file like a Database or SharedPreferences then you can load them every time you want
Furthermore you can search about Activity life-cycle and see how to use life-cycle events like OnStart to load your data
Firstly please consider startActivityForResult() ,we can send information from one activity to another and vice-versa. As mentioned consider using shared_preferences for local in memory storage. To truly accomplish this feat in a elegant way though, do consider using obervables(rxandroid). You publish observations in one activity or fragment ,
then subscribe in another activity or fragment. I did not mentioned event bus nor otto since rxjava/rxandroid surpasses it. They act a promise context management system. Also because observable in process dependent consider using broadcast receivers, to broadcast events through out your application and external if so desired.
This question already has answers here:
Intent.setData vs Intent.putExtra
(4 answers)
Closed 7 years ago.
I don't quite understand the real purpose of Data field for intents.
I have seen some examples like the following:
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
So from the documentation it seems like Data just gives you the URI, basically where the data is located.
Can't everything just be done using putExtra and just have the Activity get the extra.
For the example above, you could just put the telephone number in the extra and have the activity get the extra and then dial. When would you use setData vs putExtra?
Can't everything just be done using putExtra and just have the Activity get the extra.
Extras do not control routing of Intents. The action string, data (Uri), MIME type, and categories do. Extras are merely payload.
In this case, ACTION_CALL of a tel: Uri might be handled differently than ACTION_CALL of a sip: Uri. Only SIP-compatible VOIP clients could handle the latter. Hence, the activities for telephony-related apps can include details in their <intent-filter> elements to watch for only those Uri schemes that they can handle (among other possible constraints).
putExtra actually adds the data in the intent. It gets serialized when it is sent to another activity where it gets deserialized. These are expensive operations that could affect the performance. There is also a limit on how much data can be sent like this. If you have a big piece of data (several MBs) then it is better to use setData rather than putExtra.
In Activity I have used the following code for passing the value to other Activity classes:
intent.putExtra("book_arr", book_arr); // [putExtra(String *name*,Serializable *Value*)]
How to use like this code in Android Fragments?
I have tried the following code, but it is not supporting serialized value:
Bundle args =new Bundle();
args.putInt("book_arr", book_arr);
Thanks,
args.putSerializable("book_arr", book_arr);
If your book_arr (which should be bookArr) is a large array of heavy objects, consider making them Parcelable. You'll need to write additional code, but it's about x10 faster. (if it's not a big object you probably shouldn't bother). This page can be helpful
http://www.developerphil.com/parcelable-vs-serializable/