У меня есть проект, где я читаю json через GSON и Volley. Я хочу сохранить свои данные в базе данных, и я надеялся, что Realm будет хорошим решением. Я взял свой первый класс, который имеет семь переменных-членов, все строки и ints, и он расширил RealmObject и определил один из int в качестве первичного ключа. Он отлично компилируется, но когда он работает, я получаю тонны и тонны вывода в журналах, и в итоге приложение просто падает, пока не покажет основное действие. Кажется, что GSON не любит разбор класса, который расширил RealmObject.Как работать с Realm и GSON
Так что я сделал некоторый поиск, и я нашел этот пост с сайта Realm, но это для более старой версии Realm (я в настоящее время с помощью 0,87)
https://realm.io/docs/java/0.77.0/#other-libraries
Это дает решение, но Я не могу заставить это решение работать для меня, потому что они разбирают свой GSON по-другому, что я есть. Может быть, мы сможем решить это, просто помогая мне здесь, но я задаюсь вопросом, не будет ли это решение не работать, поскольку это для более старой версии? Во всяком случае, я разбор моего GSON так:
private void DisplayData(int count, final ArrayList<TwoLineSummaryCardDataObject> tlscdo,
final TwoLineSummaryViewAdapter lsva) {
final String url = "https://mydata.com/mydata";
final GsonRequest gsonRequest =
new GsonRequest(url, MyData.class, null, new Response.Listener<MyData>() {
@Override
public void onResponse(MyData myData) {
tlscdo.clear();
// Disable Realm stuff for now
//Realm realm = Realm.getDefaultInstance();
//realm.beginTransaction();
for (int i = 0; i < myData.getData().size(); i++) {
tlscdo.add(new TwoLineSummaryCardDataObject(myData.getData().get(i)));
//realm.copyToRealmOrUpdate(myData.getData().get(i));
}
//realm.commitTransaction();
lsva.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
if(volleyError != null) Log.e("MainActivity", volleyError.getMessage());
Toast.makeText(MainActivity.this, "Error in Volley", Toast.LENGTH_SHORT).show();
}
}
);
// Add the request to the queue
Volley.newRequestQueue(this).add(gsonRequest);
VolleyHelper.getInstance(getApplicationContext()).addToRequestQueue(gsonRequest);
1) Как я могу обновить свой код, так что я могу использовать в GsonBuilder, как, например, на странице JavaDoc Realm?
2) Я зря теряю время, потому что этот код предназначен для более старой версии Королевства, и теперь есть другой/лучший/не способ заставить ГСОН и Царство играть вместе?
Редактировать: Был обнаружен класс, чтобы увидеть класс MyData. Это очень просто:
public class MyData {
@PrimaryKey
private Integer id;
private String name;
private String abbrev;
private String countryCode;
private Integer type;
private String infoURL;
private String wikiURL;
// followed by a bunch of getters and setters
}
Чтобы уточнить, все работает отлично. Если я добавлю «extends RealmObject», он все равно будет компилироваться, но при запуске он просто извергает все виды сообщений, а затем приложение в конечном итоге сработает (из памяти, я полагаю) через несколько секунд, даже не показывая активность.
Редактировать 2, добавив лог-код в соответствии с запросом.
Когда я запускаю его с помощью «extends RealmObject», это логарифм.
http://pastebin.com/raw/1VZq8bQD
И если я беру "расширяет RealmObject", оно отлично работает.
Не могли бы вы показать свой класс MyData? –
Код класса MyData добавлен в соответствии с запросом. – MrGibbage
ОК, тогда вы также можете показать сообщения об ошибках? –