Привет, мы используем RoboSpice с ORMLite и SpringAndroidSpiceRequest для чтения Информация JSON с веб-страницы и запись в базу данных SQLite.Не удается сохранить вложенные части запроса JSON с использованием robospice и ormlite
Мы используем новейший преобразователь JSON MappingJackson2HttpMessageConverter.
// Web services support JSON responses
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
final List<HttpMessageConverter<?>> listHttpMessageConverters = restTemplate.getMessageConverters();
Мы пытались читать вложенные запросы JSON, как на примере ниже, мы можем прочитать и хранить в базе данных, первый уровень JSON (страницы, общий), но мы не можем хранить следующий Левет массива JSON, все записи «schedule_date».
Мы рассмотрели этот пример (и многие другие) как лучший пример для хранения данных JSON . Но это не работает для нас. RoboSpice persist JSON array with OrmLite
Вопрос: Как мы можем читать и писать вложенные ключи и значения JSON, We в тупике! : O
JSON:
{
"page": 2,
"total": 5,
"result":
[
{
"schedule_date": "2013-08-03"
},
{
"schedule_date": "2013-09-03"
},
{
"schedule_date": "2013-10-03"
},
{
"schedule_date": "2013-11-03"
},
{
"schedule_date": "2013-12-03"
}
]
}
BroadcastResult.java:
import java.util.Collection;
import java.util.List;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.j256.ormlite.field.ForeignCollectionField;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
@DatabaseTable(tableName="BroadcastResult")
public class BroadcastResult {
@DatabaseField(id = true)
private int page;
@DatabaseField
private int total;
@ForeignCollectionField(eager = false)
private Collection<Broadcast> result;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public Collection<Broadcast> getResult() {
return result;
}
public void setResult(Collection<Broadcast> result) {
this.result = result;
}
}
Broadcast.java:
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
@DatabaseTable(tableName="Broadcast")
public class Broadcast {
@DatabaseField(id = true)
private String schedule_date;
@DatabaseField(foreign = true)
private BroadcastResult result;
public String getScheduleDate() {
return schedule_date;
}
public void setScheduleDate(String schedule_date) {
this.schedule_date = schedule_date;
}
public void setBroadcastResult(BroadcastResult result) {
this.result = result;
}
public BroadcastResult getBroadcastResult() {
return result;
}
}
Мы получили эта ошибка, которую мы не понимаем.
Logcat: SQLiteLog (10637): (1) нет такой колонки: result_id
@DatabaseField(foreign = true) // also tried (foreign = true, ColumnName="result")
private BroadcastResult result;
Полного журнал для тестирования разбега можно увидеть здесь: https://gist.github.com/anonymous/7760344
Джексон сложный, я считаю, что имена полей строятся не из частных имен переменных, а из сеттеров и геттеров. – portforwardpodcast