I am trying to pass list to next activity but its giving me classcast exception how can i solve it?I am implementing serializable in model class.
Someone help me in resolving the issue.
List<PagesSqliteData>pagesSqliteDataArrayList = new ArrayList<>();
PagesSqliteData pagesSqlite = new PagesSqliteData();
pagesSqlite.setToc_name(bookingsSqliteDataArrayList.get(position).getToc_name());
pagesSqlite.setCompletion(bookingsSqliteDataArrayList.get(position).getCompletion());
pagesSqlite.setCategory_id(bookingsSqliteDataArrayList.get(position).getCategory_id());
pagesSqlite.setBooking_id(bookingsSqliteDataArrayList.get(position).getBooking_id());
pagesSqlite.setTable_of_content_id(bookingsSqliteDataArrayList.get(position).getTable_of_content_id());
pagesSqliteDataArrayList.add(pagesSqlite);
Intent i = new Intent(MyBookings.this, Pages.class);
i.putExtra("LIST",pagesSqliteDataArrayList);
startActivity(i);
}
Fetching like this in next activity:
PagesSqliteData details = (PagesSqliteData)getIntent().getSerializableExtra("LIST");
You get a ClassCastException for one simple reason. Look at this commented version of your code:
List<PagesSqliteData>pagesSqliteDataArrayList = new ArrayList<>();//HERE YOU CREATE AN ARRAYLIST!!!
PagesSqliteData pagesSqlite = new PagesSqliteData();
pagesSqlite.setToc_name(bookingsSqliteDataArrayList.get(position).getToc_name());
pagesSqlite.setCompletion(bookingsSqliteDataArrayList.get(position).getCompletion());
pagesSqlite.setCategory_id(bookingsSqliteDataArrayList.get(position).getCategory_id());
pagesSqlite.setBooking_id(bookingsSqliteDataArrayList.get(position).getBooking_id());
pagesSqlite.setTable_of_content_id(bookingsSqliteDataArrayList.get(position).getTable_of_content_id());
pagesSqliteDataArrayList.add(pagesSqlite);
Intent i = new Intent(MyBookings.this, Pages.class);
i.putExtra("LIST",pagesSqliteDataArrayList);
startActivity(i);
And when you load:
PagesSqliteData details = (PagesSqliteData)getIntent().getSerializableExtra("LIST");//HERE IT IS SUDDENLY A SINGLE OBJECT
So when you save, ignore the arrayList. Pass pagesSqlite instead. And make sure this class is either Serializable or Parcelable. Or when you load, load it into an ArrayList. What you do is equivalent to:
PagesSqliteData data = new ArrayList<PagesSqliteData>();
And that is something you can't do.
Related
I'm trying to transfer ArrayList between activities, but nothing I've tried works as well.
This was my best shot, but this didn't work either.
I'm calling the external action here:
getComics getComicInfo = new getComics(charName, pageNum);
getComicInfo.execute();
getIntentData()
and here i'm trying to put data, but the problem is due the fact that this is an external action, so I can't shift through activits.
if(counter == comicInfoObject.length()){
Log.v("check arr length =>" , Integer.toString(comicList.size()));
Intent i = new Intent();
i.putExtra("comicArrayList", (ArrayList<Comics>)comicList);
}
and here i'm tring to retrive the data, but it doesn't get inside the "if"
public void getIntentData(){
Intent i = getIntent();
if(i != null && i.hasExtra("comicArrayList")){
comicList2 = i.getParcelableExtra("comicArrayList");
int size = comicList2.size();
}
}
first code is where I call an external class that using api and in the bottom line creates the arrayList
second code is inside the external class, where I'm trying to pass the arrayList with putExtra
third code is where i'm tring to retrive the data after getIntentData().
Pack at the sender Activity
intent.putParcelableArrayListExtra(<KEY>, ArrayList<Comics extends Parcelable> list);
startActivity(intent);
Extract at the receiver Activity
getIntent().getParcelableArrayListExtra(<KEY>);
You need make a Comics class that implements Parcelable, then use put ParcelableArrayListExtrato pass arraylist.
Here is a sample link for Pass data between activities implements Parcelable
However be careful if your array list too big, you could get intent exception, for this case you could think about a static reference to store your array list.
I am trying to send an array of objects to a new intent, but the problem is that I don't know how to send the whole array at once. The method I managed to get it working is adding object by object, in a for loop, and in the second activity I have to get them one by one, something like this:
Main activity:
Intent newIntent = new Intent(mainA.this, secondA.class);
for(int i=0;i<numberOfObjects;i++)
newIntent.putExtra("object"+i,myObjects[i]);
newIntent.putExtra("length", x);
startActivity(newIntent);
Second activity:
Serializable n = getIntent().getSerializableExtra("length");
int x = Integer.parseInt(n.toString());
myObjects = new objClass[x];
for(int i=0;i<x;i++)
myObjects[i] = (objClass) getIntent().getSerializableExtra("object"+i);
Even if this method works, and gets me the right results, isn't there a better/faster/cleaner solution?(I searched a lot, but haven't found a better way, maybe I don't know what exactly to look for).
Make your object serializable and put all objects in a Arraylist and send it.ArrayList itself implements serializable.
Intent newIntent = new Intent(mainA.this, secondA.class);
newIntent.putExtra("list",listOfObjets);
startActivity(newIntent);
Second Activity:
ArrayList<YourObjects> list = (ArrayList<YourObjects>)getIntent().getSerializableExtra("list");
Hi you can try this as well.. Create setter getter class which will set and get your object. next create the array list of your setter getter class.next add all objects into arraylist using set method in for loop. next add that arraylist object into bundle using setArguments.
Same you can access that bundle using getArguments that's it.
I want to pass Object of one activity to another but i am not able to do that.The problem is the eclipse is putting the Object which i want to pass in red clause.This is the code i am using:
DatabaseHandler1 db1 = new DatabaseHandler1(SecureMessagesActivity.this);
Intent intent = new Intent(SecureMessagesActivity.this,ShowTheFoldersInSdCard.class);
intent.putExtra("id",(int)id);
intent.putExtra("MyClassObject", db1);
In the last line,it is showing problem in db1.Please help.Thanks in advance.
Send only id through intent like this
Intent intent = new Intent(SecureMessagesActivity.this,ShowTheFoldersInSdCard.class);
intent.putExtra("id",(int)id);
And in another activity create Helper object like this
DatabaseHandler1 db1 = new DatabaseHandler1(SecondActivity.this);
If you want to have only one instance of your Helper through whole Application, i think you should create class extending Application and create Helper object there like this
DatabaseHandler1 db1 = new DatabaseHandler1(YourApplicationClass.this);
You have to make it public and static. Then in every Activity you can call it like this
YourApplicationClass.db1.doSomething();
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.