2015-05-12 63 views
0

我一直在嘗試在我的應用程序中應用RetroFit REST客戶端,並且遇到了一個我似乎無法解決的問題。我嘗試下載一個.json文件(services.hanselandpetal.com/feeds/flowers.json),並在幾秒鐘的下載後不斷收到一個stackoverflow錯誤:Retrofit在堆棧大小錯誤中導致GET結果,1036 KB

「com.dbflowtest.MainActivity:retrofit.RetrofitError:stack大小1036KB「。

下面是我使用的代碼:

FlowerAPI.java

public interface FlowerAPI { 

    @GET("/feeds/flowers.json") 
    public void getFeed(Callback<List<Flower>> response); 
} 

MainActivity.java

private void requestFlowers() { 
    RestAdapter adapter = new RestAdapter.Builder() 
      .setEndpoint(ENDPOINT) 
      .build(); 

    FlowerAPI api = adapter.create(FlowerAPI.class); 

    api.getFeed(new Callback<List<Flower>>() { 

     @Override 
     public void success(List<Flower> flowers, Response response) { 
      Log.d(TAG, "Received flowers.") 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      Log.d(TAG, error.toString()); 
     } 
    }); 
} 

Flower.java

@Table(databaseName = AppDatabase.NAME) 
public class Flower extends BaseModel { 

    @Column(columnType = Column.PRIMARY_KEY) 
    public int productId; 

    @Column 
    public String category; 

    @Column 
    public double price; 

    @Column 
    public String instructions; 

    @Column 
    public String photo; 

    @Column 
    public String name; 

    private List<Flower> flowers; 

    public Flower() {} 

    public Flower(int productId, String category, double price, String instructions, String photo, String name) { 
     this.productId = productId; 
     this.category = category; 
     this.price = price; 
     this.instructions = instructions; 
     this.photo = photo; 
     this.name = name; 
    } 

    public List<Flower> getFlowers() { 
     if(flowers == null) { 
      flowers = new Select() 
       .from(Flower.class) 
       .queryList(); 
     } 
     return flowers; 
    } 
} 

我似乎無法來解決這個問題。任何幫助非常感謝,因爲我真的很想使用這個框架:)。

解決

出於某種原因,當我使用POJO兩個改造和DBFlow我得到這個堆棧大小問題。因此,我沒有創建1個Flower.java類,而是創建了另一個名爲FlowerDB.java。這解決了我的問題!

+0

是錯誤堆棧溢出或堆棧大小?我只是測試了這個代碼,它的工作原理。我認爲你需要發佈花類。 – inmyth

+0

謝謝你測試它。我剛剛發佈了我的Flower.java類。我認爲唯一相關的領域是屬性。註釋是針對DBFlow的。並回答你的問題,我得到一個堆棧大小的問題,而不是一個stackoverflow :)。 –

+0

它仍然有效。如果刪除所有註釋,該怎麼辦?你有沒有嘗試調用不同的API? – inmyth

回答

0

有一個好得多的方法,它允許爲Retrofit和DBFlow保留相同的POJO對象。

(有2 POJO爲同一對象是在當你想從一個側面向其他負載/更新值屁股痛。相信我,我試過....)

這是由Retrofit使用的GSon實現中的一個問題,它在DBFlow的ModelAdapter對象內丟失。

你應該這樣替換這個代碼:由

Gson gson = new GsonBuilder() 
      .setExclusionStrategies(new ExclusionStrategy() { 
       @Override 
       public boolean shouldSkipField(FieldAttributes f) { 
        return f.getDeclaredClass().equals(ModelAdapter.class); 
       } 

       @Override 
       public boolean shouldSkipClass(Class<?> clazz) { 
        return false; 
       } 
      }) 
      .create(); 

    RestAdapter adapter = new RestAdapter.Builder() 
      .setConverter(new GsonConverter(gson)) 
      .setEndpoint(ENDPOINT) 
      .build(); 

突然

RestAdapter adapter = new RestAdapter.Builder() 
     .setEndpoint(ENDPOINT) 
     .build(); 

,加載你的JSON將工作就像一個魅力...