Задача:
Передать нужные мне данные (сообщения)
Проблема:
Возникает ошибки при передаче через Parcelable.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mobile.exodus.kosmomessanger, PID: 3753
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mobile.exodus.kosmomessanger/com.mobile.exodus.kosmomessanger.MainActivity}: java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to com.mobile.exodus.kosmomessanger.MessagesObject[]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to com.mobile.exodus.kosmomessanger.MessagesObject[]
at com.mobile.exodus.kosmomessanger.MainActivity.onCreate(MainActivity.java:75)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
Вот код класса Parcelable:
import android.os.Parcel;
import android.os.Parcelable;
class MessagesObject implements Parcelable {
private String id;
private String senderId;
private String recipient;
private String message;
private String attachments;
private String date;
private String time;
private String sender_nick;
private MessagesObject(Parcel in) {
String[] data = new String[8];
in.readStringArray(data);
id = data[0];
senderId = data[1];
recipient = data[2];
message = data[3];
attachments = data[4];
date = data[5];
time = data[6];
sender_nick = data[7];
}
public MessagesObject(String id, String senderId, String recipient, String message, String attachments, String date, String time, String sender_nick){
this .id = id;
this .senderId = senderId;
this .recipient = recipient;
this .message = message;
this .attachments = attachments;
this .date = date;
this .time = time;
this .sender_nick = sender_nick;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSenderId() {
return senderId;
}
public void setSenderId(String senderId) {
this.senderId = senderId;
}
public String getRecipient() {
return recipient;
}
public void setRecipient(String recipient) {
this.recipient = recipient;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getAttachements() {
return attachments;
}
public void setAttachements(String attachments) {
this.attachments = attachments;
}
public String getDate() {
return date;
}
public void setDate(String data) {
this.date = data;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getSender_nick() {
return sender_nick;
}
public void setSender_nick(String sender_nick) {
this.sender_nick = sender_nick;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int i) {
dest.writeStringArray(new String[] { id, senderId, recipient, message, attachments, date, time, sender_nick });
}
public static final Creator<MessagesObject> CREATOR = new Creator<MessagesObject>() {
@Override
public MessagesObject createFromParcel(Parcel in) {
return new MessagesObject(in);
}
@Override
public MessagesObject[] newArray(int size) {
return new MessagesObject[size];
}
};
}
Вот здесь я сортирую данные и отправляю в Extras:
JSONArray message= <...>;
for(int i = 0, count = messages.length(); i< count; i++)
{
try {
messagesObjects[i] = new MessagesObject(jsonObjects.get(i).getString("id"), jsonObjects.get(i).getString("sender_id"),
jsonObjects.get(i).getString("recipient"), jsonObjects.get(i).getString("message"), jsonObjects.get(i).getString("attachments"),
jsonObjects.get(i).getString("date"), jsonObjects.get(i).getString("time"), jsonObjects.get(i).getString("sender_nick"));
}
catch (JSONException e) {
e.printStackTrace();
}
}
intent.putExtra("messages", messagesObjects);
startActivity(intent);
А вот момент где вылезает ошибка, это уже другое активити и здесь я пытаюсь этот Parcelable достать:
Intent intent= getIntent();
messagesObjects = (MessagesObject[]) intent.getParcelableArrayExtra("messages"); // на этой строке вылезает выше описанная ошибка
id = intent.getStringExtra("id");
Дополнение: Данные (сообщения) приходят с сервера в виде JSONArray, в котором лежат JSONObjects. Я его рассортировываю в массив класса MessagesObjects (класс, который имплементирует Parcelable). Я думаю проблема именно в нем, но найти ее не могу.
Прошу помочь! Заранее спасибо!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В строке "qwerty [5] uiopp (6) asdf (1) hjkl; [3]" нужно найти и заменить все "[N]" на "RN", а "(N)" на "XN", где N- любая цифраЧерез regex я что-то не осилил, из-за скобок
Известно, что во время рантайма конкретный дженерик-тип неизвестен, тк