I send an intent with information to start an activity. Now, instead of retrieving the info in the onCreate method, can I retrieve it after that moment? For example, when I click a button in the new activity?
Yes I think you can if you write it this way:
YourActivity.this.getIntent().getExtras();
getIntent().getExtras() yields the data in your current Activity.
If you want to pass this data to a new Activity you have to read them and write into a new Intent.
If the first activity is made as singleton then you can get the Intent data from the only Activity's instance.
Or you can make another singleton class just to hold that data for you.
Related
I have a lookup service which calculates the latency of some servers. I want to write those in TextView but since there is no findviewbyid in Service i have to send those datas to main activity. Basicly i want to send an array to MainActivity from service. How can i do that?
I think you wanted to transfer data from one activity to another? So just use the startActivityForResult()
https://developer.android.com/training/basics/intents/result
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'm new to fragments.I am trying to call search API in my fragment using AsyncTask. Json Parsing is done in MainActivity, by the way I'm not in my main activity when I use this fragment, it's connected to another activity. It works, but I'm having trouble passing the parsed info that I stored into a bundle to a new fragment. To be specific it crashes the moment I try to open a new fragment. I have the parsed information and I've set the arguments for my fragment, it's just the moment I use .commit() it crashes.
It would be great if you could post the piece of your code so we can check what is the issue.
Although I have deduced from your explanation that you might be saving the information in doInBackground which runs on the background thread. Instead, you could pass that info to the onPostExecute and save it into SharedPreferences since onPostExecute runs on the UI thread.
Let me know if this works.
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.