簡體   English   中英

Gson轉換器工廠改造2。 序列化/反序列化中的不同類型

[英]Gson converter factory retrofit2. Different types in serialization/deserialization

我正在使用wordpress post metas和rest api,我已經准備好休息一個稱為“ picture_collection”的meta字段,該字段將數據存儲為整數數組,其中每個數字代表附件的ID。 然后,我在詢問api時修改了響應,以提供鏈接列表而不是附件ID,如下所示:

    function get_pic_coll ($object, $field_name, $request) {
        include_once dirname(__FILE__) . '/attach_coll.php';
        $pic_coll = get_post_meta ($object['id'], $field_name, true);
        $json_coll = array();
        if($pic_coll != null || !empty($pic_coll)){
            foreach ($pic_coll as $pic){
                $media_id = $pic;
                $link_med = wp_get_attachment_image_src($media_id, 'medium');
                $link_full = wp_get_attachment_image_src($media_id, 'full');
                $medium_size = $link_med[0];
                $full_size = $link_full[0];
                $obj = new attach_coll($media_id, $medium_size, $full_size);
                $element = $obj->return_coll_object();
                $json_coll[] = $element;
            }
            return $json_coll;
        }
    }

而attach_coll對象為:

class attach_coll{
public function __construct($media_id, $medium_url, $orig_url){
    $this->attach_id = $media_id;
    $this->medium_size_pic = $medium_url;
    $this->full_size_pic = $orig_url;
}

private $attach_id;
private $medium_size_pic;
private $full_size_pic;

public function get_media_id(){
    return $this->attach_id;
}
public function get_medium_pic(){
    return $this->medium_size_pic;
}
public function get_orig_pic(){
    return $this->full_size_pic;
}
public function return_coll_object(){
    $ret_coll = array(
            "ID"     => $this->get_media_id(),
            "medium" => $this->get_medium_pic(),
            "full"   => $this->get_orig_pic()
    );
    return $ret_coll;
}

}

Java方面的事情是這樣的:1)用戶制作一張圖片並將其上傳,他以交換的方式接收存儲在Integers ArrayList中的附件的ID。 2)當他完成程序后,更新post_meta並將整個列表傳遞給api。 3)程序以json的形式接收響應,其中包含帶有我的自定義字段的整個帖子,它看起來像這樣:

{...
   "id":"someValue",
   "title":"myTitle",
   "pic_collection":[ {'ID':'picID','mediumSizePic':'someUrl', 'FullSizePic':'SomeOtherUrl},{...}],

php代碼運行良好,正如我從ResponseBody中看到的,我所期望的json一樣,問題是我遇到了一個錯誤,“ gson期望一個Integer並找到了一個對象”,這是合乎邏輯的,因為pojo的定義如下:

@SerializedName("pic_collection")
private List<Integer> idList = new ArrayList<Integer>();
public void setList(List<Integer> list){
this.idList=list;
}

我試圖將列表更改為:

List<PicCollection> picList = new ArrayList<PicCollection>();
public class PicCollection{
@SerializedName("ID")
private int picId;
@SerializedName("medium_size")
private String medSizeUrl;
@SerializedName("full_size")
private String fullSizeUrl;
Getters and Setters
}

但這只是使一切變得復雜,並且沒有解決問題,因為我仍然遇到相同的gson錯誤“ ID期望一個int但找到了一個對象”並且根本沒有返回鏈接。 簡要介紹設置ID的代碼:

iterator=idList.iterator;
while(iterator.hasNext()){
 FotoCollection fc = new FotoCollection();
 fc.ID = iterator.next

我該怎么解決這個問題? 我需要自定義轉換器?

我剛剛創建了2個對象:一個用於請求,一個用於響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM