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

标签 android android-async-http sugarorm

我目前正在使用 Sugar ORMAndroid Async Http Client对于我的 Android 应用程序。

我通读了 Sugar ORM 的文档,并完全按照那里写的去做。 我的 HttpClient 使用单例模式并提供调用某些 API 的方法。

不好的部分来了。我无法将数据持久保存到由 Sugar ORM 创建的数据库中。 这是调用 API 的方法:

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 正在打印的内容:

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 生态系统的新手,希望你们能帮助解决这个问题。 提前致谢

最佳答案

我只是解决了和你一样的问题。 颈部疼痛,但几个小时后我找出了导致此问题的原因。

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

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

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  

}

干杯!

关于android - Sugar ORM 没有将数据保存到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150867/

相关文章:

java - 如何禁用带有计时器的按钮并在重新启动时保持禁用状态?

java - OSNotificationPayload 无法转换为 JSONObject

android - 图形布局损坏

Android Studio 无法仅在 Debug模式下查看异常日志

java - 选择用于异步 http 文件上传的文件(uri 到文件路径)

Android 入门 Sugar ORM

android - SugarORM + Multidex

java - 安卓 : Error:Execution failed for task ':app:dexDebug'

java - 使用 Android Async Http 处理成功请求返回

Android Sugar ORM - 自定义 SD 路径中的自定义/预填充数据库