gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:14:41 25 4
gpt4 key购买 nike

我目前正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com