This is the code
ArrayList<MyObject> list = new ArrayList<MyObject>();
list.add(new MyObject());
Intent intent = new Intent(this, ReceiverActivity.class);
intent.putExtra("list", list);
startActivity(intent);
ReceiverActivity
List<MyObject> list = (List<MyObject>)getIntent().getExtras().getParcelable("list");
Here list is null. Also this doesn't work:
List<MyObject> list = (List<MyObject>)getIntent().getExtras().getSerializable("list");
MyObject is Parcelable, I implemented all required methods. I guess this implementation is not the problem, because otherwise I would recive other kind of exceptions. But I don't get anything besides list is null.
Thanks in advance...
Now I found this:
List<Parcelable> list = (List<Parcelable>)getIntent().getParcelableArrayListExtra("list");
that has to be used in the receiver activity, but how do I send it and how do I get List<MyObject> from List<Parcelable> ?
USe i.putParcelableArrayListExtra(name, value) where i is your intent. Dont use putExtra() for a parcelable ArrayList.
Try:
ArrayList<MyObject> myList = extras.<MyObject>getParcelableArrayList("list"));
Related
I am trying to send a List<Question> to other activity but I am receiving the error "java.util.ArrayList cannot be cast to android.os.Parcelable".
FirstActivity
List<Question> list;
list = response.body().items;
Intent myIntent = new Intent(SearchActivity.this, RestaurantActivity.class);
myIntent.putExtra("restaurants", (Parcelable) list);
SearchActivity.this.startActivity(myIntent);
SecondActivity
Intent intent = getIntent();
List<Question> restaurants = intent.getExtras().getParcelable("restaurants");
textView = (TextView)findViewById(R.id.textView);
textView.setText(restaurants.get(0).title);
What is the problem?
The reason it doesn't work is that ArrayList itself does not implement the Parcelable interface. However, some Android classes like Intent and Bundle have been set up to handle ArrayLists provided that the instances they contain are of a class which does implement Parcelable.
So, instead of putExtra, try using the putParcelableArrayListExtra method instead.
You'll need to use get getParcelableArrayListExtra on the other side.
Be aware that this only works with ArrayLists, and the Question class will need to implement Parcelable.
How do I pass an ArrayList of arrays to an intent in Android? I know you can pass an ArrayList<String>, but is it possible to pass an ArrayList<String[]>?
It's possible, but you need to pass it as a Serializable and you'll need to cast the result when you extract the extra. Since ArrayList implements Serializable and String[] is inherently serializable, the code is straightforward. To pass it:
ArrayList<String[]> list = . . .;
Intent i = . . .;
i.putExtra("strings", list);
To retrieve it:
Intent i = . . .;
ArrayList<String[]> list = (ArrayList<String[]>) getSerializableExtra("strings");
You'll have to suppress (or live with) the unchecked conversion warning.
hi i would like to send string arraylist values from one class another class.i tried using bundle concept but in second class in arraylist showing null value.plaese any one suggest me wherre did mistake..
Activity1.class:
public static ArrayList<String> customers = new ArrayList<String>();
customers.add("radha");
customers.add("aswini");
Intent i=new Intent(Activity1 .this,Activity2.class);
i.putExtra("customers1", customers);
Log.i("arrayvalues1",""+ customers);
startActivity(i);
Activity2.class:
String[] mystringArray = getIntent().getStringArrayExtra("customers1");
Log.i("arrayvalues2",""+ mystringArray);
ArrayList<String> mystringArray = getintent().getStringArrayListExtra("customers1");
when the arraylist is public static, you can directly access it using classname.arraylist na.
Activity1.cutomers
If you create a public static variable, you can access it in a static way:
In Activity2.class:
Activity1.customers;
For Activity 1:
ArrayList<String> Customers = new ArrayList<String>();
Intent i=new Intent(Activity1 .this,Activity2.class);
i.putStringArrayListExtra("customers1",(ArrayList<String>) Customers);
startActivity(i);
For Activity 2:
ArrayList<String> Customers = new ArrayList<String>();
Bundle extra=getIntent().getExtras();
if(extra!=null){
Customers =extra.getStringArrayList("customers1");
}
I have this application with 2 classes, in the first class I define a list array wich I want to access in my second class, how do I do that? class one (with the array extends listActivity and the other class extends Activity). I don't think it's nessecary to post my code as I believe there is a quick solution to this I just don't know it. Allthough I can post it if you can't help me without seeing the actual code.
You can use a custom ApplicationContext to share global state between activities - see here for more details...
you can pass ArrayList<String> 's across activities using intentExtras.
ArrayList<String> myArrayList = new ArrayList<String>();
// populate your array -> if you want to send objects make a string form of them
Intent myIntent = new Intent(this, Activit2.class);
mtIntent.putStringArrayList("my_array_list", myArrayList);
In Activity2
Intent intent = getIntent();
List<String> stringMediaList = intent.getStringArrayListExtra("my_array_list");
for (int i = 0; i < stringMediaList.size(); i++) {
//reconstruct object if needed
}
this will work if you dont want to use parcelable
I have a List in one of my activities and need to pass it to the next activity.
private List<Item> selectedData;
I tried putting this in intent by :
intent.putExtra("selectedData", selectedData);
But it is not working. What can be done?
Like howettl mentioned in a comment, if you make the object you are keeping in your list serializeable then it become very easy. Then you can put it in a Bundle which you can then put in the intent. Here is an example:
class ExampleClass implements Serializable {
public String toString() {
return "I am a class";
}
}
... */ Where you wanna create the activity /*
ExampleClass e = new ExampleClass();
ArrayList<ExampleClass> l = new ArrayList<>();
l.add(e);
Intent i = new Intent();
Bundle b = new Bundle();
b.putSerializeable(l);
i.putExtra("LIST", b);
startActivity(i);
You have to instantiate the List to a concrete type first. List itself is an interface.
If you implement the Parcelable interface in your object then you can use the putParcelableArrayListExtra() method to add it to the Intent.
i think ur item should be parcelable. and you should use arraylist instead of list.
then use intent.putParcelableArrayListExtra
This is what worked for me.
//first create the list to put objects
private ArrayList<ItemCreate> itemsList = new ArrayList<>();
//on the sender activity
//add items to list where necessary also make sure the Class model ItemCreate implements Serializable
itemsList.add(theInstanceOfItemCreates);
Intent goToActivity = new Intent(MainActivity.this, SecondActivity.class);
goToActivity.putExtra("ITEMS", itemsList);
startActivity(goToActivity);
//then on second activity
Intent i = getIntent();
receivedItemsList = (ArrayList<ItemCreate>) i.getSerializableExtra("ITEMS");
Log.d("Print Items Count", receivedItemsList.size()+"");
for (Received item:
receivedItemList) {
Log.d("Print Item name: ", item.getName() + "");
}
I hope it works for you too.
Everyone says that you can use Serializable, but none mentioned that you can just cast the value to Serializable instead of list.
intent.putExtra("selectedData", (Serializable) selectedData);
Core's lists implementations already implement Serializable, so you're not bound to a specific implementation of list, but remember that you still can catch ClassCastException.