2016-07-16 16 views
0

pojoをgsonに変換する際に問題が発生しました。私の変換メソッドがアプリケーションをフリーズし、「アプリケーションが応答していません。閉じる」と表示されます。PojoをGsonに変換する

以下

はPOJOクラスがNewsTrend.class

ある

public class NewsTrend extends RealmObject { 

     private String title; 
     private String href; 
     private String content; 
     private String image; 
     private String timestamp; 
     private Integer comments; 
     private String type; 
     private String flag; 
     private String ext_date; 
     private Integer like_status; 
     private Integer like_count; 
     private Integer read_count; 
     private Integer dislike_count; 
     private Integer read_status; 
     private Integer news_id; 


     /* Requires an empty constructor */ 
     public NewsTrend() { 
     } 

     public NewsTrend(NewsTrend postsData) { 
      this.title = postsData.getTitle(); 
      this.href = postsData.getHref(); 
      this.timestamp = postsData.getTimestamp(); 
      this.type = postsData.getType(); 
      this.comments = postsData.getComments(); 
      this.image = postsData.getImage(); 
      this.content = postsData.getContent(); 
      this.flag = postsData.getFlag(); 
      this.ext_date = postsData.getExt_date(); 
      this.like_status = postsData.getLike_status(); 
      this.like_count = postsData.getLike_count(); 
      this.dislike_count = postsData.getDislike_count(); 
      this.read_status = postsData.getRead_status(); 
      this.news_id = postsData.getNews_id(); 
      this.read_count = postsData.getRead_count(); 
     } 


     public String getTitle() { 
      return title; 
     } 

     public void setTitle(String title) { 
      this.title = title; 
     } 

     public String getHref() { 
      return href; 
     } 

     public void setHref(String href) { 
      this.href = href; 
     } 

     public String getContent() { 
      return content; 
     } 

     public void setContent(String content) { 
      this.content = content; 
     } 

     public String getImage() { 
      return image; 
     } 

     public void setImage(String image) { 
      this.image = image; 
     } 

     public String getTimestamp() { 
      return timestamp; 
     } 

     public void setTimestamp(String timestamp) { 
      this.timestamp = timestamp; 
     } 

     public Integer getComments() { 
      return comments; 
     } 

     public void setComments(Integer comments) { 
      this.comments = comments; 
     } 

     public String getType() { 
      return type; 
     } 

     public void setType(String type) { 
      this.type = type; 
     } 

     public String getFlag() { 
      return flag; 
     } 

     public void setFlag(String flag) { 
      this.flag = flag; 
     } 

     public String getExt_date() { 
      return ext_date; 
     } 

     public void setExt_date(String ext_date) { 
      this.ext_date = ext_date; 
     } 

     public Integer getLike_status() { 
      return like_status; 
     } 

     public void setLike_status(Integer like_status) { 
      this.like_status = like_status; 
     } 

     public Integer getLike_count() { 
      return like_count; 
     } 

     public void setLike_count(Integer like_count) { 
      this.like_count = like_count; 
     } 

     public Integer getRead_count() { 
      return read_count; 
     } 

     public void setRead_count(Integer read_count) { 
      this.read_count = read_count; 
     } 

     public Integer getDislike_count() { 
      return dislike_count; 
     } 

     public void setDislike_count(Integer dislike_count) { 
      this.dislike_count = dislike_count; 
     } 

     public Integer getRead_status() { 
      return read_status; 
     } 

     public void setRead_status(Integer read_status) { 
      this.read_status = read_status; 
     } 

     public Integer getNews_id() { 
      return news_id; 
     } 

     public void setNews_id(Integer news_id) { 
      this.news_id = news_id; 
     } 
    } 

NewsTrendList.class以下

public class NewsTrendList extends RealmObject { 

     private RealmList<NewsTrend> data; 

     /** 
     * 
     * @return 
     *  The data 
     */ 
     public RealmList<NewsTrend> getData() { 
      return data; 
     } 

     /** 
     * 
     * @param data 
     *  The data 
     */ 
     public void setData(RealmList<NewsTrend> data) { 
      this.data = data; 
     } 
    } 

は、変換方法

であります

以下は、変換のフルクラスです。

public class Utils { 

//public RealmResults<NewsTrend> realmResults; 

public static boolean isNewsLikedOrFaved(Context context, NewsTrend newsItem, boolean isLiked) { 

    ArrayList<NewsTrend> newsItems = getLikedOrFavedNews(context, isLiked); 

    if (newsItems != null) { 


     for (NewsTrend news : newsItems) { 

      if (newsItem.getNews_id().equals(news.getNews_id())) { 
       Log.d("logFavourite", "isNewsLikedOrFaved true newsItem.getId: " + newsItem.getNews_id() + ", news.getId: " + news.getNews_id()); 

       return true; 
      } 
     } 
    } 

    Log.d("logFavourite", "isNewsLikedOrFaved false"); 

    return false; 

} 


public static void likeOrFavNews(Context context, NewsTrend newsItem, boolean isLike) { 

    Log.d("logFavourite", "likeNews"); 


    SharedPreferences preferences = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE); 

    String jsonLikedNews; 
    if (isLike) 
     jsonLikedNews = preferences.getString("likedNews", null); 
    else 
     jsonLikedNews = preferences.getString("favedNews", null); 


    if (jsonLikedNews != null) { 
     ArrayList<NewsTrend> newsItems = convertToModel(jsonLikedNews); 
     newsItems.add(newsItem); 

     Log.d("logFavourite", "size: " + newsItems.size()); 
     String jsonUpdatedLikedNews = convertToJson(newsItems); 

     SharedPreferences.Editor editor = preferences.edit(); 
     if (isLike) 
      editor.putString("likedNews", jsonUpdatedLikedNews); 
     else 
      editor.putString("favedNews", jsonUpdatedLikedNews); 

     editor.commit(); 
    } else { 

     ArrayList<NewsTrend> newsItems = new ArrayList<>(); 
     newsItems.add(newsItem); 

     Log.d("logFavourite", "size: " + newsItems.size()); 
     String jsonUpdatedLikedNews = convertToJson(newsItems); 


     SharedPreferences.Editor editor = preferences.edit(); 
     if (isLike) 
      editor.putString("likedNews", jsonUpdatedLikedNews); 
     else 
      editor.putString("favedNews", jsonUpdatedLikedNews); 

     editor.commit(); 


    } 

} 

public static void unlikeOrUnfavNews(Context context, NewsTrend newsItem, boolean isLike) { 

    Log.d("logFavourite", "likeNews"); 

    SharedPreferences preferences = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE); 

    String jsonLikedNews; 
    if (isLike) 
     jsonLikedNews = preferences.getString("likedNews", null); 
    else 
     jsonLikedNews = preferences.getString("favedNews", null); 

    if (jsonLikedNews != null) { 
     ArrayList<NewsTrend> newsItems = convertToModel(jsonLikedNews); 

     for (int i = 0; i < newsItems.size(); i++) { 

      if (newsItems.get(i).getNews_id() == newsItem.getNews_id()) 
       newsItems.remove(i); 

     } 

     Log.d("logFavourite", "size: " + newsItems.size()); 


     String jsonUpdatedLikedNews = convertToJson(newsItems); 

     SharedPreferences.Editor editor = preferences.edit(); 
     if (isLike) 
      editor.putString("likedNews", jsonUpdatedLikedNews); 
     else 
      editor.putString("favedNews", jsonUpdatedLikedNews); 

     editor.commit(); 
    } 

} 

public static ArrayList<NewsTrend> getLikedOrFavedNews(Context context, boolean isLike) { 

    SharedPreferences preferences = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE); 
    String jsonLikedNews; 
    if (isLike) 
     jsonLikedNews = preferences.getString("likedNews", null); 
    else 
     jsonLikedNews = preferences.getString("favedNews", null); 

    ArrayList<NewsTrend> newsItems; 
    if (jsonLikedNews != null) { 
     newsItems = convertToModel(jsonLikedNews); 
    } else { 
     newsItems = new ArrayList<>(); 
    } 
    return newsItems; 


} 

     public static String convertToJson(ArrayList<NewsTrend> newsItems) { 
      Gson gson = new Gson(); 
      Log.d("erroFav", "some better error" + newsItems.toString()); 
      String json = gson.toJson(newsItems); 

      return json; 
     } 

public static ArrayList<NewsTrend> convertToModel(String jsonString) { 
    Gson gson = new Gson(); 
    NewsTrend[] newsItems = gson.fromJson(jsonString, NewsTrend[].class); 
    ArrayList<NewsTrend> newsItemList = new ArrayList<>(); 

    for (int i = 0; i < newsItems.length; i++) { 
     newsItemList.add(newsItems[i]); 
    } 
    return newsItemList; 
} 





public static String convertToNewsJson(NewsTrend news) { 
    Gson gson = new Gson(); 
    String json = gson.toJson(news); 
    return json; 
} 

public static NewsTrend convertToNewsModel(String jsonString) { 
    Gson gson = new Gson(); 
    NewsTrend news = gson.fromJson(jsonString, NewsTrend.class); 
    return news; 
} 

}

答えて

1

あなたは毎回は、あなただけではなく、 Gsonインスタンスを有するので、オブジェクトにJSON要素を変換しているnew Gson()インスタンスを作成しているので。

実際にバックグラウンドスレッドで解析を行っていない可能性もあります。これは、Volleyを使用している場合はよくある間違いです。

(また、あなたが実際のデータベースの使用を避けて、共有設定に書き込む巨大なStringオブジェクトを直接作成している場合、あなたのアプリケーションにRealmがあるのはなぜですか?Stringはありませんデータセットが大きすぎる場合はメモリに保存してください)

+0

問題をよく理解しているようです。コードiの一部を変更または提供して解決できるようにします。ありがとう。 – SimpiMind

+0

私は改造を使用しています、私のアプリに似ていて相違する機能を作成しようとしています。なぜならあなたはShared Preferenceを使用しているからです。 – SimpiMind

+0

アプリケーションのサブクラスに 'Gson'のインスタンスを**ちょうど1つだけ作成してから、それをどこでも使用するか、' Utils'クラスで 'private static final Gson gson = new Gson();'としてください。あなたはRealmを使ってあなたの好きなニュースやfavニュースを取得する必要があります.SpacePreferencesを完全に残しておく必要があります。 – EpicPandaForce

0

Uは、http://www.jsonschema2pojo.org/ サイトを使用gsonするPOJOに変換することができます。

+1

これは私がしたいことではありません。私はすでにjsonをpojoに変換しました。 – SimpiMind

関連する問題