2015-05-12 31 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将工作就像一个魅力...