2014-10-01 31 views
5

我目前使用我的Android應用程序的Sugar ORMAndroid Async Http ClientSugar ORM不將數據保存到數據庫中

我閱讀了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 

而且我看了看糖ORM標籤在這裏計算器,但沒有答案或者問題可以給我提示如何解決這個問題。 我是Android生態系統的新手,並且很樂意幫助你們解決這個問題。 在此先感謝

回答

7

我只是解決它,你有同樣的問題。 這是一個痛苦的脖子,但幾個小時後,我發現是什麼原因造成了這個問題。

使用糖ORM你必須,因爲它是屬於SugarRecord類, 否則ORM將嘗試更新的對象,而不是將它們插入不集id屬性。 由於我需要與我的對象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 

} 

乾杯!

+1

你說得對。我剛纔解決了這個問題,但忘了將解決方案添加到此線程中。 以下是SugarORM的github上的問題站點: https://github.com/satyan/sugar/issues/171 – Superbyte 2014-12-03 15:15:22

+0

因此,我們無法控制自己的id? – 2015-04-21 08:35:06

+0

@DeanWild不幸的不是。由於這個問題有超過2500個視圖,我想告訴你們,我從SQLite和SugarORM切換到[Realm.io](https://realm.io/docs/java/latest/),我不得不說對我來說這是一個很好的選擇。 Realm是一個面向對象的數據庫,您也可以將其用於Android和iOS開發。 – Superbyte 2015-07-15 13:45:18