1

I'm stucked with sending an arraylist of objects to another activity. The data to send to, is retrieved via webservice called in an asynctask (SplashScreen activity).

I've already followed some guidelines (i.e. Problem unmarshalling parcelables) but without any luck.

In fact the second activity gets to retrieve the information, and the application works properly, but the exception keeps showing up.

I'd really appreciate any kind of help since it's taking me forever to sort this matter out.

The exception:

01-14 11:31:26.490    2357-3205/? E/Parcelīš• Class not found when unmarshalling: com.rebytes.ilistas.MapPacks
java.lang.ClassNotFoundException: com.rebytes.ilistas.MapPacks
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:204)
        at java.lang.Class.forName(Class.java:169)
        at android.os.Parcel.readParcelableCreator(Parcel.java:2091)
        at android.os.Parcel.readParcelable(Parcel.java:2055)
        at android.os.Parcel.readValue(Parcel.java:1971)
        at android.os.Parcel.readMapInternal(Parcel.java:2255)
        at android.os.Bundle.unparcel(Bundle.java:223)
        at android.os.Bundle.getString(Bundle.java:1082)
        at android.content.Intent.getStringExtra(Intent.java:4961)
        at com.android.server.am.ActivityStack.startActivityLocked(ActivityStack.java:3761)
        at com.android.server.am.ActivityStack.startActivityMayWait(ActivityStack.java:4977)
        at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3173)
        at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3129)
        at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:157)
        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2125)
        at android.os.Binder.execTransact(Binder.java:388)
        at dalvik.system.NativeStart.run(Native Method)

The AsyncTask (SplashScreen Activity)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    this.cont = getApplicationContext();

    try {
        String pack = getPackageManager().getPackageInfo(getPackageName(), 0).packageName;

        toDownload = new MenuIntializationJSONFeedTask(this).execute("http://ilistas.slormin.com/v3/android/menuJSON.php").get();

        Intent mainClass = new Intent(SplashScreen.this, MainActivity.class);
        Bundle bundle = new Bundle();
        bundle.setClassLoader(MainActivity.class.getClassLoader());
        bundle.putParcelable("arraylist", toDownload);
        mainClass.putExtras(bundle);
        startActivity(mainClass);
        finish();
        overridePendingTransition(R.anim.appear, R.anim.disappear);

    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

}

private class MenuIntializationJSONFeedTask extends AsyncTask<String, Void, MapPacks> {
    Context context;
    public ArrayList<MenuItems> listaDeResultados = new ArrayList<MenuItems>();

    private MenuIntializationJSONFeedTask(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected MapPacks doInBackground(String... params) {
        JSONObject cadenaJSON = null;
        try {
            cadenaJSON = new JSONObject(readJSONFeed(params[0]));
            JSONArray entradaMenu = cadenaJSON.getJSONArray("menu");
            int i = 0;
            while(i<entradaMenu.length()){
                JSONObject cancion1 = entradaMenu.getJSONObject(i);
                JSONObject detalleCancion = cancion1.getJSONObject("entradas");
                com.rebytes.ilistas.MenuItems menuItem = new com.rebytes.ilistas.MenuItems(detalleCancion.getInt("Id"),
                        detalleCancion.getInt("Level"),
                        detalleCancion.getInt("Position"),
                        Base64.decode(detalleCancion.getString("Image"),0),
                        detalleCancion.getString("Name"),
                        detalleCancion.getString("Url"),
                        detalleCancion.getString("raizJSON"));

                listaDeResultados.add(i,menuItem);
                i++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        toDownload.setMappacks(listaDeResultados);
        return toDownload;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);

    }

    @Override
    protected void onPostExecute(MapPacks result) {
        super.onPostExecute(result);
    }
}

public String readJSONFeed(String URL){
    StringBuilder sB = new StringBuilder();
    HttpClient hC = new DefaultHttpClient();
    hC.getParams().setIntParameter("http.connection.timeout", 15000);
    HttpGet hG = new HttpGet(URL);
    try {
        HttpResponse hR = hC.execute(hG);
        StatusLine sL = hR.getStatusLine();
        int statusCode = sL.getStatusCode();
        if (statusCode == 200){
            HttpEntity hE = hR.getEntity();
            InputStream inputStream = hE.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine())!=null){
                sB.append(line);
            }
            inputStream.close();
        } else {
            Log.d("JSON", "Failed to download file");
        }
    } catch (IOException e) {
        Log.d("readJSONFeed", e.getLocalizedMessage());
    }

    return sB.toString();
}

}

MapPacks (Wrapper of parcelable MenuItems objects)

public class MapPacks  implements Parcelable {
public ArrayList<MenuItems> mappacks;


public MapPacks(){}
protected MapPacks(Parcel in){
    in.readBundle(MainActivity.class.getClassLoader());
    mappacks = new ArrayList<MenuItems>();
    //in.readList(mappacks,MainActivity.class.getClassLoader());
}


public void setMappacks(ArrayList<MenuItems> mappacks) {
    this.mappacks = mappacks;
}


public List<MenuItems> getMappacks() {
    return mappacks;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeList(mappacks);
}

public static final Parcelable.Creator<MapPacks> CREATOR
        = new Parcelable.Creator<MapPacks>() {

    @Override
    public MapPacks createFromParcel(Parcel source) {
        return new MapPacks(source);
    }

    @Override
    public MapPacks[] newArray(int size) {
        return new MapPacks[size];
    }
};

}

MenuItems (parcelable object wrapped by MapPacks)

public class MenuItems implements Parcelable{
public int id;
public int level;
public int idPadre;
public int position;
public byte[] image;
public String name;
public String url;
public String rootJson;

public MenuItems(int id, int level, int position, byte[] image, String name, String url, String rootJson) {
    this.id = id;
    this.level = level;
    this.position = position;
    this.image = image;
    this.name = name;
    this.url = url;
    this.rootJson = rootJson;
}

public MenuItems() {

}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getLevel() {
    return level;
}

public void setLevel(int level) {
    this.level = level;
}

public int getIdPadre() {
    return idPadre;
}

public void setIdPadre(int idPadre) {
    this.idPadre = idPadre;
}

public int getPosition() {
    return position;
}

public void setPosition(int position) {
    this.position = position;
}

public byte[] getImage() {
    return image;
}

public void setImage(byte[] image) {
    this.image = image;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getRootJson() {
    return rootJson;
}

public void setRootJson(String rootJson) {
    this.rootJson = rootJson;
}

public MenuItems(Parcel in) {
    id = in.readInt();
    level = in.readInt();
    position = in.readInt();
    image = in.createByteArray();
    name = in.readString();
    url = in.readString();
    rootJson = in.readString();
}

public static final Parcelable.Creator<MenuItems> CREATOR = new Parcelable.Creator<MenuItems>() {
    public MenuItems createFromParcel(Parcel in) {
        MenuItems mp = new MenuItems();
        mp.id = in.readInt();
        mp.level = in.readInt();
        mp.position = in.readInt();
        mp.image = in.createByteArray();
        mp.name = in.readString();
        mp.url = in.readString();
        mp.rootJson = in.readString();

        return mp;
    }

    public MenuItems[] newArray(int size) {
        MenuItems[] mps = new MenuItems[size];
        for (int i = 0; i < size; ++i) {
            mps[i] = new MenuItems();
        }
        return mps;
    }
};


public int describeContents() {
    return 0;
}

public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(id);
    dest.writeInt(level);
    dest.writeInt(position);
    dest.writeByteArray(image);
    dest.writeString(name);
    dest.writeString(url);
    dest.writeString(rootJson);
}

}

Community
  • 1
  • 1
user2794919
  • 11
  • 1
  • 1

0 Answers0