2015-09-05 63 views
0

介紹

我的代碼工作正常。我很好奇,知道這種方法是好吧對於這個特定的用例,因爲我找不到一個改造的例子,不是使用GSON或其他JSON解析庫,但只是使用POJO來保存數據。這是不通過get/set-ters改裝POJO的正確方法嗎?

(!請注意,我一直在試圖格式化我的代碼一會兒我們對此深感抱歉)

在這個例子中,我從TMDB的API請求數據:.../3/movie/{id}?API_KEY=x

數據在JSON返回(減少請圍繞 「評論」 對象)

{ 
"vote_count":2034, 
"reviews":{ 
    "page":1, 
    "results":[ 
     { 
      "id":"55660928c3a3687ad7001db1", 
      "author":"Phileas Fogg", 
      "content":"Fabulous action movie. Lots of interesting characters. They don't make many movies like this. The whole movie from start to finish was entertaining I'm looking forward to seeing it again. I definitely recommend seeing it.", 
      "url":"http://j.mp/1HLTNzT" 
     }, 
     { 
      "id":"55732a53925141456e000639", 
      "author":"Andres Gomez", 
      "content":"Good action movie with a decent script for the genre. The photography is really good too but, in the end, it is quite repeating itself from beginning to end and the stormy OST is exhausting.", 
      "url":"http://j.mp/1dUnvpG" 
     } 
    ], 
    "total_pages":1, 
    "total_results":2 
}, 
"trailers":{ 
    "quicktime":[ 

    ], 
    "youtube":[ 
     { 
      "name":"Trailers From Hell", 
      "size":"HD", 
      "source":"FRDdRto_3SA", 
      "type":"Featurette" 
     }, 
     { 
      "name":"Trailer 2", 
      "size":"HD", 
      "source":"jnsgdqppAYA", 
      "type":"Trailer" 
     }, 
     { 
      "name":"Official Trailer #1", 
      "size":"HD", 
      "source":"YWNWi-ZWL3c", 
      "type":"Trailer" 
     } 
    ] 
} 

方法

  1. 創建改造界面。希望我能在這裏展示,但格式化會變得精神。

  2. 這是奇怪的部分。我創建瞭如下所示的POJO,它工作正常。

    公共類TMDBMovieDetailsRetrofitObj {

    //運行在電影/ ID端點 公共字符串運行時可用;

    public String tagline;

    public評論評論;

    公共類評論{

    public Reviews() { reviews = new Reviews(); } 
    
    // To know how many reviews we have got! 
    public String total_results; 
    
    public List<ReviewResults> results; 
    
    public class ReviewResults{ 
    
        public ReviewResults() { 
         results = new ArrayList<>(); 
        } 
    
        public String id; 
        public String author; 
        public String content; 
        public String url; 
    } 
    

    } }

沒有創建getter和setter方法,因爲我有一個掌握着大量的信息,並具有另一個TMDBMovie對象是自己的getter和setter方法。

  • 基本上,我用這POJO作爲中間轉印體啄...
  • 我的問題

    你覺得這兩點是好的:

    1. 該POJO有3倍的水平,改造處理相當好的公共嵌套類。

    2. 我確實有一個TMDBMovie對象,它有自己的getter和setter方法,通過它我可以進行檢查,驗證和小數據操作。如果公共變量沒有問題,這個POJO甚至需要getter和setter方法嗎?

    回答

    1

    命名您的類變量,以便將JSON轉換爲Java對象是一個好主意。但是,這些類不需要嵌套。您可以定義List<Result> results並在別處定義Result類。希望這是明確的。

    +0

    對於不需要嵌套的類是正確的,但是來自Python背景,創建多個文件感覺很奇怪。我需要改變我對Java的想法。 –

    1
    1. 不,他們的三個級別的嵌套類定義很可能會增加維護問題。此外,試圖初始化外部類字段的嵌套類構造函數有點粗略。只是實施每個類中的一個它自己 -

    TMDBMovieDetailsRetrofitObj.java

    public class TMDBMovieDetailsRetrofitObj { 
        // Runtime available in movie/id endpoint 
        public String runtime; 
        public String tagline; 
        public Reviews reviews; 
    } 
    

    Review.java

    public class Reviews { 
        // To know how many reviews we have got! 
        public String total_results; 
        public List<ReviewResults> results; 
    } 
    

    ReviewResults.java

    public class ReviewResults { 
        public String id; 
        public String author; 
        public String content; 
        public String url; 
    } 
    
  • 這是一個辯論的問題nd個人喜好。對於一個對象,它是簡單地用於不具有其它方法和行爲的數據,尤其是短壽命的數據操作對象像您,跳過getter和setter往往是可接受的,特別是在Android。其他人可能有不同的意見。如果您有一位老闆或老師對此事提出意見,請按照他們希望您做的事做!
  • +0

    謝謝你的明確解釋@iagreen。 1.嗯,你說得對維護問題。儘管我希望這些要求不會改變,他們可能有一天。 2.正確,最好的做法是,獲取/套。在這種情況下,我有一個專門用於Movie的對象,它具有自己的get/sets,其中包含驗證和if-null情況。謝天謝地,這是我的Udacity Android課程,而不是大學。 –

    相關問題