首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sugar ORM没有将数据保存到数据库中

Sugar ORM没有将数据保存到数据库中
EN

Stack Overflow用户
提问于 2014-10-02 05:20:34
回答 1查看 9.9K关注 0票数 6

我目前在我的安卓应用程序中使用Sugar ORMAndroid Async Http Client

我通读了Sugar ORM的文档,并完全按照文档中的说明进行了操作。我的HttpClient使用单例模式,并提供了调用某些API的方法。

现在它最糟糕的部分来了。我无法将数据持久地保存到由Sugar ORM创建的数据库中。下面是调用API的方法:

代码语言:javascript
复制
public void getAvailableMarkets(final Context context, final MarketAdapter adapter) {
        String url = BASE_URL.concat("/markets.json");
        client.addHeader("Content-Type", "application/json");
        client.addHeader("Accept", "application/json");

        client.get(context, url, null, new JsonHttpResponseHandler() {

            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONArray response) {

                Log.i(TAG, "Fetched available markets from server: " + response.toString());


                Result<Markets> productResult = new Result<Markets>();
                productResult.setResults(new Gson().<ArrayList<Markets>>fromJson(response.toString(),
                        new TypeToken<ArrayList<Markets>>() {
                        }.getType()));
                ArrayList<Markets> marketsArrayList = productResult.getResults();

                // This lines tells me that there are no entries in the database
                List<Markets> marketsInDb = Markets.listAll(Markets.class);

                if(marketsInDb.size() < marketsArrayList.size() ||
                        marketsInDb.size() > marketsArrayList.size()) {

                    Markets.deleteAll(Markets.class);

                    for(Markets m : marketsArrayList) {
                        Markets market = new Markets(m.getId(), m.getName(), m.getChainId(), m.getLat(),
                                m.getLng(), m.getBusinessHourId(), m.getCountry(), m.getZip(), m.getCity(),
                                m.getStreet(), m.getPhoto(), m.getIcon(), m.getUrl());

                        market.save();

                        adapter.add(market);
                    }

                    adapter.notifyDataSetChanged();

                } 

                List<Markets> market = Markets.listAll(Markets.class);
                // This lines proves that Sugar ORM is not saving the entries   
                Log.i(TAG, "The market database list has the size of:" + market.size());
            }
        });
    }

这是Logcat打印的内容:

代码语言:javascript
复制
D/Sugar: Fetching properties
I/Sugar: Markets saved : 3
I/Sugar: Markets saved : 5
I/RestClient: The market database list has the size of:0

我还在stackoverflow上看了一下Sugar ORM标签,但没有答案或问题可以给我一个如何解决这个问题的提示。我是android生态系统的新手,希望能得到你们的帮助来解决这个问题。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-03 07:24:26

我只是解决了和你一样的问题。这是一个令人头疼的问题,但几个小时后,我发现是什么导致了这个问题。

使用Sugar ORM时,不能设置id属性,因为它属于SugarRecord类,否则ORM将尝试更新对象而不是插入它们。因为我需要对象id为字段,所以我使用json注释将其分配给另一个字段。最后一步是配置GSON以排除没有公开注释字段。

所以我的类现在看起来像下面的一个:

代码语言:javascript
复制
public class MyClass
{
    @Expose
    @SerializedName("id")
    private long myId;
    @Expose 
    private String field1;
    @Expose
    private String field2;
    @Expose
    private byte[] field3;
    @Expose
    private double field4;

    public MyClass() { }

    // parametrized constructor and more logic  

}

干杯!

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26150867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档