2015-12-23 6 views
0

У меня есть проект, где я читаю 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", оно отлично работает.

+0

Не могли бы вы показать свой класс MyData? –

+0

Код класса MyData добавлен в соответствии с запросом. – MrGibbage

+0

ОК, тогда вы также можете показать сообщения об ошибках? –

ответ

1

1) Как обновить код, чтобы я мог использовать GsonBuilder, например, пример на странице Realm javadoc?

Вы можете создать новый класс, который расширяет Request<T> и применяет его к существующему коду. В вашем случае, самый быстрый способ скопировать исходный код GsonRequest класса на новый, а также изменить строку, инициализировать в Gson объект в конструкторе:

mGson = new Gson(); 

с кодом, как написано на веб-сайте realm.io в ,

2) Я зря теряю время, потому что этот код предназначен для более старой версии Королевства, и теперь есть другой/лучший/не способ заставить ГСОН и Царство играть вместе?

На момент написания этого ответа, последняя версия царства равна 0.87.1, а method of working with GSON - это то же самое. Так что это все равно должно быть правильным.

Смежные вопросы