无法从服务器改装android的响应中提取阵列,导致我崩溃?

无法从服务器改装android的响应中提取阵列,导致我崩溃?,android,retrofit,Android,Retrofit,我在应用程序中处理传入和传出消息。有一些带有附件的信息,目前我正在做一件事,以某种方式获得这些附件,即下载到手机上。为了下载该文件,我需要知道两件事:它的名称和它所在消息的id。要显示整个消息,我有ViewMessage类: public class ViewMessage { @SerializedName("date") @Expose private String date; @SerializedName("type") @Expose p

我在应用程序中处理传入和传出消息。有一些带有附件的信息,目前我正在做一件事,以某种方式获得这些附件,即下载到手机上。为了下载该文件,我需要知道两件事:它的名称和它所在消息的id。要显示整个消息,我有ViewMessage类:

public class ViewMessage {
    @SerializedName("date")
    @Expose
    private String date;
    @SerializedName("type")
    @Expose
    private String type;
    @SerializedName("user_id")
    @Expose
    private String userId;
    @SerializedName("body")
    @Expose
    private String body;
    @SerializedName("can_delete")
    @Expose
    private String canDelete;
    @SerializedName("can_reply")
    @Expose
    private String canReply;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("subject")
    @Expose
    private String subject;


    @SerializedName("attach")
    private FileData[] attach;

    private boolean hasAttaches() {
        return attach != null && attach.length > 0;
    }

    public String[] getAttachesNames() {
        if(hasAttaches())
        {
            String[] names = new String[attach.length];
            line 44 at my error logs - System.arraycopy(attach, 0, names, 0, attach.length);
            return names;
        }
        return new String[0];
    }


    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getCanDelete() {
        return canDelete;
    }

    public void setCanDelete(String canDelete) {
        this.canDelete = canDelete;
    }

    public String getCanReply() {
        return canReply;
    }

    public void setCanReply(String canReply) {
        this.canReply = canReply;
    }

    public String getName() {
        return name;
    }

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

    public String getSubject() {
        return subject;
    }


    public void setSubject(String subject) {
        this.subject = subject;
    }


}


class FileData{
    private String name;
    private float size;
}
然后我尝试在主类中提取数组的函数:

String file_name[] = Objects.requireNonNull(response.body()).getAttachesNames();
                    line 144 in my error: for (String aFile_name : file_name) {
                        txt.append(Arrays.toString(file_name) + "/n");
                    }
但结果,我的应用程序出现故障,出现错误:

08-21 09:41:58.342 E: FATAL EXCEPTION: main
    Process: com.example.developer_4.test_login, PID: 3462
    java.lang.ArrayStoreException: source[0] of type com.example.developer_4.test_login.data.model.FileData cannot be stored in destination array of type java.lang.String[]
        at java.lang.System.arraycopy(Native Method)
        at com.example.developer_4.test_login.data.model.ViewMessage.getAttachesNames(ViewMessage.java:44)
        at com.example.developer_4.test_login.ActionsMessages.MessageShow$2.onResponse(MessageShow.java:144)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

似乎您正在尝试将FileData[]类型转换为字符串[]。请使用其他方式或只是发布您的响应和FileData类,这样,我可以帮助您


谢谢

尝试像这样更改for循环

String file_name[] = Objects.requireNonNull(response.body()).getAttachesNames();

                    for (int i = 0, i<aFile_name.size(); i++) {
                        txt.append(String.valueOf(aFile_name.get(i)) + "/n");
                     }
String file_name[]=Objects.requirennull(response.body()).getAttachesNames();

对于(int i=0,iUnfortuly,或者幸运的是,我解决了我的问题,但是现在输出文件附件数组时出现问题,很可能我将创建一个新问题,或者我可以使用新数据更新当前问题。