diff --git a/app/src/main/java/com/gh/common/util/NewsUtils.java b/app/src/main/java/com/gh/common/util/NewsUtils.java index c4ab560dff..da1e8acbd4 100644 --- a/app/src/main/java/com/gh/common/util/NewsUtils.java +++ b/app/src/main/java/com/gh/common/util/NewsUtils.java @@ -51,10 +51,9 @@ public class NewsUtils { context.startActivity(intent); } - /* + /** * 启动消息详情页面 */ - public static void startMessageActivity(Context context, ConcernEntity concernEntity, String entrance) { AppController.put("ConcernEntity", concernEntity); Intent intent = new Intent(context, MessageDetailActivity.class); @@ -63,8 +62,6 @@ public class NewsUtils { context.startActivity(intent); } - - /** * 统计阅读量 */ diff --git a/app/src/main/java/com/gh/common/util/PostCommentUtils.java b/app/src/main/java/com/gh/common/util/PostCommentUtils.java index c6144034a5..0471add2a1 100644 --- a/app/src/main/java/com/gh/common/util/PostCommentUtils.java +++ b/app/src/main/java/com/gh/common/util/PostCommentUtils.java @@ -11,70 +11,77 @@ import com.gh.gamecenter.volley.extended.StringExtendedRequest; /** * Created by khy on 2016/11/9. + * */ public class PostCommentUtils { - public static void addCommentData(final String url, final String content, final Context context, final PostCommentListener listener) { + + public static void addCommentData(final String url, final String content, final Context context, + final PostCommentListener listener) { new Thread(new Runnable() { @Override public void run() { - Utils.log("url::" + url, "/ content::" + content); StringExtendedRequest request = new StringExtendedRequest( Request.Method.POST, url, content, new Response.Listener() { @Override public void onResponse(String response) { if (listener != null){ - listener.postSucced(response.toString()); + listener.postSucced(response); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - if (listener != null){ - listener.postFailed(error); + if (error.networkResponse != null && error.networkResponse.statusCode == 401) { + TokenUtils.getToken(context, false); + addCommentData(url, content, context, listener); + return; } - } - }); - request.setShouldCache(false); - request.addHeader("TOKEN",TokenUtils.getToken(context)); - AppController.addToRequestQueue(request); - } - }).start(); - - } - - public static void addCommentVoto(final String newsId, final Context context, final PostCommentListener listener) { - new Thread(new Runnable() { - @Override - public void run() { - - StringExtendedRequest request = new StringExtendedRequest( - Request.Method.POST, Config.COMMENT_HOST + "comment/" + newsId + "/vote" , - new Response.Listener() { - @Override - public void onResponse(String response) { - Log.e("======onResponse", "onResponse"); - if (listener != null){ - listener.postSucced(response.toString()); - } - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - Log.e("======onErrorResponse", new String(error.networkResponse.data)); if (listener != null){ listener.postFailed(error); } } }); request.setShouldCache(false); - request.addHeader("TOKEN",TokenUtils.getToken(context)); + request.addHeader("TOKEN", TokenUtils.getToken(context)); AppController.addToRequestQueue(request); } }).start(); + } + public static void addCommentVoto(final String newsId, final Context context, final PostCommentListener listener) { + new Thread(new Runnable() { + @Override + public void run() { + StringExtendedRequest request = new StringExtendedRequest( + Request.Method.POST, Config.COMMENT_HOST + "comment/" + newsId + "/vote" , + new Response.Listener() { + @Override + public void onResponse(String response) { + if (listener != null){ + listener.postSucced(response); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + if (error.networkResponse != null && error.networkResponse.statusCode == 401) { + TokenUtils.getToken(context, false); + addCommentVoto(newsId, context, listener); + return; + } + if (listener != null){ + listener.postFailed(error); + } + } + }); + request.setShouldCache(false); + request.addHeader("TOKEN", TokenUtils.getToken(context)); + AppController.addToRequestQueue(request); + } + }).start(); } public interface PostCommentListener { @@ -82,5 +89,4 @@ public class PostCommentUtils { void postFailed(VolleyError error); } - } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 16509edbee..4da4b036c4 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -460,20 +460,23 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene } setContentView(contentView); + sp = getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); + isNewFirstLaunch = sp.getBoolean("isNewFirstLaunchV" + PackageUtils.getVersion(getApplicationContext()), true); + initViews(); if (savedInstanceState != null) { currentTab = savedInstanceState.getInt("currentTab"); + } else if (isNewFirstLaunch) { + currentTab = 1; } else { currentTab = 0; } setTabSelection(currentTab); - sp = getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); concernManager = new ConcernManager(getApplicationContext()); getSearchHints(); - isNewFirstLaunch = sp.getBoolean("isNewFirstLaunchV" + PackageUtils.getVersion(getApplicationContext()), true); if (!isNewFirstLaunch && sp.getBoolean("autoupdate", true)) { // 检查助手更新 checkUpdate(); @@ -724,13 +727,6 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene concernInfo.setPackageNames(packageNames); concernManager.updateByConcern(concernInfo); } - //无需默认关注 -// if (isNewFirstLaunch) { -// //默认安装即为关注 -// if (!concernManager.isConcern(gameEntity.getId())) { -// concernManager.addByEntity(gameEntity); -// } -// } } addConcernCount(); if (cCount == size) { @@ -1039,7 +1035,11 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene Intent toIntent = new Intent(MainActivity.this, clazz); if ("NewsActivity".equals(to) || "NewsDetailActivity".equals(to)) { toIntent.putExtra("newsId", getIntent().getExtras().getString("newsId")); - toIntent.putExtra("entrance", "(插件跳转)"); + String entrance = getIntent().getExtras().getString("entrance"); + if (TextUtils.isEmpty(entrance) || !entrance.startsWith("(") || !entrance.endsWith(")")) { + entrance = "(插件跳转)"; + } + toIntent.putExtra("entrance", entrance); } else if("DownloadManagerActivity".equals(to)) { String packageName = getIntent().getExtras().getString("packageName"); if (packageName != null) { @@ -1048,7 +1048,11 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene } } else if ("GameDetailsActivity".equals(to) || "GameDetailActivity".equals(to)) { toIntent.putExtra("gameId", getIntent().getExtras().getString("gameId")); - toIntent.putExtra("entrance", "(插件跳转)"); + String entrance = getIntent().getExtras().getString("entrance"); + if (TextUtils.isEmpty(entrance) || !entrance.startsWith("(") || !entrance.endsWith(")")) { + entrance = "(插件跳转)"; + } + toIntent.putExtra("entrance", entrance); } else if ("SubjectActivity".equals(to)) { toIntent.putExtra("id", getIntent().getExtras().getString("id")); toIntent.putExtra("name", getIntent().getExtras().getString("name")); @@ -1232,7 +1236,6 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene private ProgressBar app_pb_progress; private TextView app_tv_speed; private TextView app_tv_percent; - private TextView app_tv_cancel; private void showDownloadDialog(String md5) { downloadDialog = new Dialog(this); @@ -1243,8 +1246,7 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene app_tv_speed = (TextView) view.findViewById(R.id.app_tv_speed); app_tv_percent = (TextView) view.findViewById(R.id.app_tv_percent); - app_tv_cancel = (TextView) view.findViewById(R.id.app_tv_cancel); - app_tv_cancel.setOnClickListener(new OnClickListener() { + view.findViewById(R.id.app_tv_cancel).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DownloadManager.getInstance(getApplicationContext()).cancel(appEntity.getUrl()); @@ -1303,8 +1305,7 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene Map map = new HashMap<>(); String version = PackageUtils.getVersion(this); String user = DeviceUtils.getDeviceID(this); - String channel = (String) PackageUtils.getMetaData(this, - getPackageName(), "TD_CHANNEL_ID"); + String channel = (String) PackageUtils.getMetaData(this, getPackageName(), "TD_CHANNEL_ID"); map.put("step", step); map.put("version", version); map.put("user", user); diff --git a/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java b/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java index 912835a90f..4537c320fc 100644 --- a/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java @@ -44,7 +44,7 @@ import butterknife.OnTouch; /** * Created by khy on 2016/11/8. */ -public class MessageDetailActivity extends BaseActivity{ +public class MessageDetailActivity extends BaseActivity { @BindView(R.id.message_detail_rv) RecyclerView mMessageDetailRv; @BindView(R.id.message_detail_user_rl) RelativeLayout mMessageDetailUserRl; @@ -233,7 +233,9 @@ public class MessageDetailActivity extends BaseActivity{ public void postFailed(VolleyError error) { mToast.cancel(); - if (error.networkResponse.data == null) return; + if (error.networkResponse == null) { + return; + } String errorData = new String(error.networkResponse.data); try { @@ -306,7 +308,6 @@ public class MessageDetailActivity extends BaseActivity{ } else { imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); } - } } diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index c455efc3b4..1fb675a744 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -19,7 +19,6 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; -import com.android.volley.Request; import com.android.volley.Response; import com.gh.base.AppController; import com.gh.base.BaseActivity; @@ -36,7 +35,6 @@ import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.manager.FilterManager; import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; -import com.gh.gamecenter.volley.extended.StringExtendedRequest; import org.json.JSONArray; import org.json.JSONException; diff --git a/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java index c5ceafee45..5840cfa29b 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java @@ -22,7 +22,6 @@ import com.gh.common.util.NewsUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.TokenUtils; import com.gh.common.util.Utils; -import com.gh.gamecenter.GameDetailActivity; import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.SubjectActivity; diff --git a/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java index 11b290fa5b..cd8c60c88d 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java @@ -34,14 +34,14 @@ import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.adapter.viewholder.CommentHeadViewHolder; import com.gh.gamecenter.adapter.viewholder.CommentViewHolder; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.adapter.viewholder.NewsDigestViewHolder; import com.gh.gamecenter.db.VoteDao; import com.gh.gamecenter.db.info.VoteInfo; import com.gh.gamecenter.entity.CommentEntity; import com.gh.gamecenter.entity.ConcernEntity; -import com.gh.gamecenter.eventbus.EBReuse; import com.gh.gamecenter.listener.OnCallBackListener; import com.gh.gamecenter.manager.DataCollectionManager; -import com.gh.gamecenter.news.NewsDigestViewHolder; +import com.gh.gamecenter.manager.VisitManager; import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; import com.google.gson.Gson; @@ -62,8 +62,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import de.greenrobot.event.EventBus; - /** * Created by khy on 2016/11/8. */ @@ -292,15 +290,15 @@ public class MessageDetailAdapter extends RecyclerView.Adapter 999) { - viewHolder.commentnum.setText("999+"); + if (mConcernEntity.getCommentnum() != 0) { + if (mConcernEntity.getCommentnum() > 999) { + viewHolder.commentnum.setText(R.string.thousand); } else { - viewHolder.commentnum.setText(mConcernEntity.getMessageDetailCommentCount() + ""); + viewHolder.commentnum.setText(String.valueOf(mConcernEntity.getCommentnum())); } } @@ -369,23 +367,20 @@ public class MessageDetailAdapter extends RecyclerView.Adapter= 1) { + if (mVoteDao.isVote(commentEntity.getId()) && commentEntity.getVote() >= 1) { holder.commentLikeCountTv.setTextColor(mContext.getResources().getColor(R.color.theme)); holder.commentLikeIv.setImageResource(R.drawable.comment_like_select); } else { @@ -438,7 +433,7 @@ public class MessageDetailAdapter extends RecyclerView.Adapter img; private String link; private String brief; - private int messageDetailViews; //用于消息详情页面 - private int messageDetailCommentCount;//用于消息详情页面 + private int views; + private int commentnum; - public int getMessageDetailCommentCount() { - return messageDetailCommentCount; + public int getCommentnum() { + return commentnum; } - public void setMessageDetailCommentCount(int messageDetailCommentCount) { - this.messageDetailCommentCount = messageDetailCommentCount; + public void setCommentnum(int commentnum) { + this.commentnum = commentnum; } - public int getMessageDetailViews() { - return messageDetailViews; + public int getViews() { + return views; } - public void setMessageDetailViews(int messageDetailViews) { - this.messageDetailViews = messageDetailViews; + public void setViews(int views) { + this.views = views; } public String getBrief() { diff --git a/app/src/main/java/com/gh/gamecenter/entity/FeedbackEntity.java b/app/src/main/java/com/gh/gamecenter/entity/FeedbackEntity.java deleted file mode 100644 index 1ef64133d7..0000000000 --- a/app/src/main/java/com/gh/gamecenter/entity/FeedbackEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gh.gamecenter.entity; - -public class FeedbackEntity { - - private long val; - private long up; - private long down; - - public long getVal() { - return val; - } - - public void setVal(long val) { - this.val = val; - } - - public long getUp() { - return up; - } - - public void setUp(long up) { - this.up = up; - } - - public long getDown() { - return down; - } - - public void setDown(long down) { - this.down = down; - } - - @Override - public String toString() { - return "FeedbackEntity [val=" + val + ", up=" + up + ", down=" + down - + "]"; - } - -} diff --git a/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java b/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java index 11365f2a00..40163c660b 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java @@ -19,6 +19,16 @@ public class NewsEntity { private String intro; + private int views; + + public int getViews() { + return views; + } + + public void setViews(int views) { + this.views = views; + } + public String getId() { return id; } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java index db694c8c46..628014e8ca 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java @@ -1,7 +1,6 @@ package com.gh.gamecenter.game; import android.os.Bundle; -import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; diff --git a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java index 98e7246465..b2af850260 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java @@ -31,7 +31,6 @@ import com.gh.common.util.GameViewUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.NewsUtils; import com.gh.common.util.PlatformUtils; -import com.gh.common.view.AutoScrollViewPager; import com.gh.common.view.CardLinearLayout; import com.gh.download.DownloadManager; import com.gh.gamecenter.NewsDetailActivity; diff --git a/app/src/main/java/com/gh/gamecenter/manager/VisitManager.java b/app/src/main/java/com/gh/gamecenter/manager/VisitManager.java new file mode 100644 index 0000000000..65a9864995 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/manager/VisitManager.java @@ -0,0 +1,88 @@ +package com.gh.gamecenter.manager; + +import com.gh.common.constant.Config; +import com.gh.gamecenter.retrofit.ObservableUtil; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import rx.Observable; +import rx.Subscriber; + +/** + * Created by LGT on 2016/11/16. + * + */ +public class VisitManager { + + private static VisitManager mInstance; + + public static VisitManager getInstance() { + if (mInstance == null) { + synchronized (VisitManager.class) { + if (mInstance == null) { + mInstance = new VisitManager(); + } + } + } + return mInstance; + } + + private List urlList; + + private VisitManager() { + urlList = new ArrayList<>(); + } + + public void addUrl(String ids) { + String url = Config.DATA_HOST + "v1d46/news/" + ids + "/visit"; + if (!urlList.contains(url)) { + urlList.add(url); + } + } + + public String getUrl(String id) { + for (int i = 0, size = urlList.size(); i < size; i++) { + if (urlList.get(i).contains(id)) { + return urlList.get(i); + } + } + return null; + } + + // 更新okhttp缓存数据 + public static void updateOkhttpCache(final String news_id) { + ObservableUtil.io(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + String key = VisitManager.getInstance().getUrl(news_id); + if (key == null) { + return; + } + byte[] data = RetrofitManager.getInstance().getCache(key); + if (data != null) { + try { + JSONArray jsonArray = new JSONArray(new String(data)); + JSONObject jsonObject; + for (int i = 0, size = jsonArray.length(); i < size; i++) { + jsonObject = jsonArray.getJSONObject(i); + if (jsonObject.getString("id").equals(news_id)) { + jsonObject.put("views", jsonObject.getInt("views") + 1); + break; + } + } + RetrofitManager.getInstance().updateCache(key, jsonArray.toString().getBytes()); + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + }, null); + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java index 5c22c3951e..c1c21f0beb 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java @@ -1,5 +1,6 @@ package com.gh.gamecenter.news; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.util.ArrayMap; @@ -110,6 +111,15 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On }); } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == 0x125 && adapter.getSkipPosition() != -1) { + // 更新对应位置 + adapter.notifyItemChanged(adapter.getSkipPosition()); + adapter.setSkipPosition(-1); + } + } + @OnClick(R.id.news1_tv_concern) public void concern() { // 关注 推荐关注的游戏 ArrayList list = new ArrayList<>(); diff --git a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java index 65a116b0a6..8da15c560d 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java @@ -3,7 +3,6 @@ package com.gh.gamecenter.news; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.TextUtils; @@ -12,10 +11,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toast; -import com.android.volley.Response; -import com.android.volley.toolbox.JsonArrayRequest; import com.gh.base.AppController; -import com.gh.common.constant.Config; import com.gh.common.constant.ItemViewType; import com.gh.common.util.ConcernContentUtils; import com.gh.common.util.DataUtils; @@ -24,20 +20,25 @@ import com.gh.common.util.MD5Utils; import com.gh.common.util.NewsUtils; import com.gh.common.util.TokenUtils; import com.gh.common.view.CardLinearLayout; +import com.gh.gamecenter.MessageDetailActivity; import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.ShareCardActivity; import com.gh.gamecenter.ShareCardPicActivity; import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.adapter.viewholder.NewsDigestViewHolder; import com.gh.gamecenter.db.info.ConcernInfo; +import com.gh.gamecenter.entity.CommentnumEntity; import com.gh.gamecenter.entity.ConcernEntity; import com.gh.gamecenter.entity.ViewsEntity; import com.gh.gamecenter.listener.OnCallBackListener; import com.gh.gamecenter.manager.ConcernManager; import com.gh.gamecenter.manager.DataCollectionManager; +import com.gh.gamecenter.manager.VisitManager; import com.gh.gamecenter.retrofit.JSONObjectResponse; import com.gh.gamecenter.retrofit.ObservableUtil; +import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import org.json.JSONArray; @@ -73,15 +74,13 @@ public class News1FragmentAdapter extends RecyclerView.Adapter concernList; - private ArrayMap viewsMap; - private ArrayMap commentMap; - private List urlList; private List gameIdList; private String key; private String ids; private int itemCount; + private int skipPosition; private boolean isLoading; private boolean isOver; @@ -93,13 +92,10 @@ public class News1FragmentAdapter extends RecyclerView.Adapter(); - urlList = new ArrayList<>(); gameIdList = new ArrayList<>(); itemCount = 0; - - viewsMap = new ArrayMap<>(); - commentMap = new ArrayMap<>(); + skipPosition = -1; isNetworkError = false; isOver = false; @@ -175,8 +171,7 @@ public class News1FragmentAdapter extends RecyclerView.Adapter>() { + .subscribe(new Response>() { @Override public void onResponse(List response) { isLoading = false; @@ -191,7 +186,7 @@ public class News1FragmentAdapter extends RecyclerView.Adapter>() { + .subscribe(new Response>() { @Override public void onResponse(List response) { isLoading = false; @@ -260,7 +255,7 @@ public class News1FragmentAdapter extends RecyclerView.Adapter list, final int start) { - if (list == null || list.isEmpty()) { - return; - } - StringBuilder ids = new StringBuilder(); - for (int i = 0, size = list.size(); i < size; i++) { - ids.append(list.get(i).getId()); - ids.append("-"); - } - - final String url = Config.COMMENT_HOST + "article/" + ids.substring(0, ids.length() - 1) + "/comment/num"; - - JsonArrayRequest request = new JsonArrayRequest(url, - new Response.Listener() { - @Override - public void onResponse(JSONArray response) { - try { - JSONObject jsonObject; - for (int i = 0, size = response.length(); i < size; i++) { - jsonObject = response.getJSONObject(i); - commentMap.put(jsonObject.getString("_id"), jsonObject.getInt("num")); - } - notifyItemRangeChanged(start, start + list.size() - 1); - } catch (JSONException e) { - e.printStackTrace(); - } - } - }, null); - AppController.addToRequestQueue(request); - } - // 更新设备关注 public void updateConcern() { RequestBody body = RequestBody.create(MediaType.parse("application/json"), @@ -366,23 +330,82 @@ public class News1FragmentAdapter extends RecyclerView.Adapter() { @Override public void call(String ids) { - RetrofitManager.getData().getNewsViews(ids, - new com.gh.gamecenter.retrofit.Response>(){ + RetrofitManager.getData() + .getNewsViews(ids) + .map(new Func1, String>() { @Override - public void onResponse(List response) { - for (ViewsEntity viewsEntity : response) { - viewsMap.put(viewsEntity.getId(), viewsEntity.getViews()); + public String call(List list) { + for (ViewsEntity viewsEntity : list) { + for (ConcernEntity concernEntity : concernList) { + if (viewsEntity.getId().equals(concernEntity.getId())) { + concernEntity.setViews(viewsEntity.getViews()); + break; + } + } } + return null; + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(String response) { + notifyItemRangeChanged(start, list.size()); + } + }); + } + }); + } + + // 获取新闻评论数 + private void getNewsCommentnum(final List list, final int start) { + if (list == null || list.isEmpty()) { + return; + } + ObservableUtil.computation(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + StringBuilder builder = new StringBuilder(); + for (int i = 0, size = list.size(); i < size; i++) { + builder.append(list.get(i).getId()); + builder.append("-"); + } + builder.deleteCharAt(builder.length() - 1); + subscriber.onNext(builder.toString()); + subscriber.onCompleted(); + } + }, new Action1() { + @Override + public void call(String ids) { + RetrofitManager.getComment() + .getNewsCommentnum(ids) + .map(new Func1, String>() { + @Override + public String call(List list) { + for (CommentnumEntity commentnumEntity : list) { + for (ConcernEntity concernEntity : concernList) { + if (commentnumEntity.getId().equals(concernEntity.getId())) { + concernEntity.setCommentnum(commentnumEntity.getNum()); + break; + } + } + } + return null; + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(String response) { notifyItemRangeChanged(start, list.size()); } }); @@ -391,23 +414,18 @@ public class News1FragmentAdapter extends RecyclerView.Adapter() { - @Override - public void call(Subscriber subscriber) { - String key = null; - for (int i = 0, size = urlList.size(); i < size; i++) { - if (urlList.get(i).contains(news_id)) { - key = urlList.get(i); - break; - } - } - if (key == null) { - return; - } - byte[] data = RetrofitManager.getInstance().getCache(key); - if (data != null) { - try { - JSONArray jsonArray = new JSONArray(new String(data)); - JSONObject jsonObject; - for (int i = 0, size = jsonArray.length(); i < size; i++) { - jsonObject = jsonArray.getJSONObject(i); - if (jsonObject.getString("id").equals(news_id)) { - jsonObject.put("views", jsonObject.getInt("views") + 1); - break; - } - } - RetrofitManager.getInstance().updateCache(key, jsonArray.toString().getBytes()); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - }, null); - } - @Override public int getItemViewType(int position) { if (position == concernList.size()) { @@ -524,24 +506,24 @@ public class News1FragmentAdapter extends RecyclerView.Adapter 0) { - viewHolder.commentnum.setVisibility(View.VISIBLE); - if (commentCount > 999) { - viewHolder.commentnum.setText("999+"); - } else { - viewHolder.commentnum.setText(commentCount + ""); - } - } else { + int commentnum = concernEntity.getCommentnum(); + if (commentnum == 0) { viewHolder.commentnum.setVisibility(View.GONE); + } else { + viewHolder.commentnum.setVisibility(View.VISIBLE); + if (commentnum > 999) { + viewHolder.commentnum.setText(R.string.thousand); + } else { + viewHolder.commentnum.setText(String.valueOf(commentnum)); + } } if (concernEntity.getLink() != null) { @@ -553,13 +535,11 @@ public class News1FragmentAdapter extends RecyclerView.Adapter newsList; - private ArrayMap viewsMap; - private List urlList; private int itemCount; @@ -74,8 +70,6 @@ public class News2FragmentAdapter extends RecyclerView.Adapter(); - viewsMap = new ArrayMap<>(); - urlList = new ArrayList<>(); itemCount = 0; @@ -159,23 +153,34 @@ public class News2FragmentAdapter extends RecyclerView.Adapter() { @Override public void call(String ids) { - RetrofitManager.getData().getNewsViews(ids, - new Response>(){ + RetrofitManager.getData() + .getNewsViews(ids) + .map(new Func1, String>() { @Override - public void onResponse(List response) { - for (ViewsEntity viewsEntity : response) { - viewsMap.put(viewsEntity.getId(), viewsEntity.getViews()); + public String call(List list) { + for (ViewsEntity viewsEntity : list) { + for (NewsEntity newsEntity : newsList) { + if (viewsEntity.getId().equals(newsEntity.getId())) { + newsEntity.setViews(viewsEntity.getViews()); + break; + } + } } + return null; + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(String response) { notifyItemRangeChanged(start, list.size()); } }); @@ -252,14 +257,14 @@ public class News2FragmentAdapter extends RecyclerView.Adapter() { - @Override - public void call(Subscriber subscriber) { - String key = null; - for (int i = 0, size = urlList.size(); i < size; i++) { - if (urlList.get(i).contains(news_id)) { - key = urlList.get(i); - break; - } - } - if (key == null) { - return; - } - byte[] data = RetrofitManager.getInstance().getCache(key); - if (data != null) { - try { - JSONArray jsonArray = new JSONArray(new String(data)); - JSONObject jsonObject; - for (int i = 0, size = jsonArray.length(); i < size; i++) { - jsonObject = jsonArray.getJSONObject(i); - if (jsonObject.getString("id").equals(news_id)) { - jsonObject.put("views", jsonObject.getInt("views") + 1); - break; - } - } - RetrofitManager.getInstance().updateCache(key, jsonArray.toString().getBytes()); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - }, null); - } - public boolean isOver() { return isOver; } diff --git a/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java index 759d3754b4..04e27765d3 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java @@ -1,7 +1,6 @@ package com.gh.gamecenter.news; import android.content.Context; -import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; import android.view.LayoutInflater; @@ -10,7 +9,6 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.Toast; -import com.gh.common.constant.Config; import com.gh.common.constant.ItemViewType; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; @@ -26,12 +24,12 @@ import com.gh.gamecenter.entity.NewsEntity; import com.gh.gamecenter.entity.ViewsEntity; import com.gh.gamecenter.listener.OnCallBackListener; import com.gh.gamecenter.manager.DataCollectionManager; +import com.gh.gamecenter.manager.VisitManager; import com.gh.gamecenter.retrofit.JSONObjectResponse; import com.gh.gamecenter.retrofit.ObservableUtil; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; -import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -59,8 +57,6 @@ public class News3FragmentAdapter extends RecyclerView.Adapter newsList; - private ArrayMap viewsMap; - private List urlList; private int itemCount; @@ -74,8 +70,6 @@ public class News3FragmentAdapter extends RecyclerView.Adapter(); - viewsMap = new ArrayMap<>(); - urlList = new ArrayList<>(); itemCount = 0; @@ -157,23 +151,34 @@ public class News3FragmentAdapter extends RecyclerView.Adapter() { @Override public void call(String ids) { - RetrofitManager.getData().getNewsViews(ids, - new Response>(){ + RetrofitManager.getData() + .getNewsViews(ids) + .map(new Func1, String>() { @Override - public void onResponse(List response) { - for (ViewsEntity viewsEntity : response) { - viewsMap.put(viewsEntity.getId(), viewsEntity.getViews()); + public String call(List list) { + for (ViewsEntity viewsEntity : list) { + for (NewsEntity newsEntity : newsList) { + if (viewsEntity.getId().equals(newsEntity.getId())) { + newsEntity.setViews(viewsEntity.getViews()); + break; + } + } } + return null; + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(String response) { notifyItemRangeChanged(start, list.size()); } }); @@ -250,14 +255,14 @@ public class News3FragmentAdapter extends RecyclerView.Adapter() { - @Override - public void call(Subscriber subscriber) { - String key = null; - for (int i = 0, size = urlList.size(); i < size; i++) { - if (urlList.get(i).contains(news_id)) { - key = urlList.get(i); - break; - } - } - if (key == null) { - return; - } - byte[] data = RetrofitManager.getInstance().getCache(key); - if (data != null) { - try { - JSONArray jsonArray = new JSONArray(new String(data)); - JSONObject jsonObject; - for (int i = 0, size = jsonArray.length(); i < size; i++) { - jsonObject = jsonArray.getJSONObject(i); - if (jsonObject.getString("id").equals(news_id)) { - jsonObject.put("views", jsonObject.getInt("views") + 1); - break; - } - } - RetrofitManager.getInstance().updateCache(key, jsonArray.toString().getBytes()); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - }, null); - } - public boolean isOver() { return isOver; } diff --git a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java index 7692fc1c91..ade0e35acc 100644 --- a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java @@ -21,6 +21,7 @@ import de.greenrobot.event.EventBus; /** * Created by khy on 2016/6/29. + * 资讯Fragment */ public class NewsFragment extends HomeFragment implements View.OnClickListener, ViewPager.OnPageChangeListener { @@ -42,20 +43,20 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - initTextView(); home_vp_content.setAdapter(new FragmentAdapter(getChildFragmentManager())); home_vp_content.addOnPageChangeListener(this); - currentItem = 1; + currentItem = 0; if (savedInstanceState != null) { currentItem = savedInstanceState.getInt("currentItem"); } home_vp_content.setCurrentItem(currentItem); + initTextView(); + DisplayMetrics outMetrics = new DisplayMetrics(); - getActivity().getWindowManager().getDefaultDisplay() - .getMetrics(outMetrics); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); width = outMetrics.widthPixels / 4; lparams = new LinearLayout.LayoutParams(width / 2, DisplayUtils.dip2px(getActivity(), 2)); @@ -73,7 +74,11 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, private void initTextView() { tv_guanzhu = new TextView(getActivity()); tv_guanzhu.setText("关注"); - tv_guanzhu.setTextColor(getResources().getColor(R.color.title)); + if (currentItem == 0) { + tv_guanzhu.setTextColor(getResources().getColor(R.color.theme)); + } else { + tv_guanzhu.setTextColor(getResources().getColor(R.color.title)); + } tv_guanzhu.setGravity(Gravity.CENTER); tv_guanzhu.setOnClickListener(this); LinearLayout.LayoutParams lparams4 = new LinearLayout.LayoutParams( @@ -83,7 +88,11 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, tv_zixun = new TextView(getActivity()); tv_zixun.setText("资讯"); - tv_zixun.setTextColor(getResources().getColor(R.color.theme)); + if (currentItem == 1) { + tv_zixun.setTextColor(getResources().getColor(R.color.theme)); + } else { + tv_zixun.setTextColor(getResources().getColor(R.color.title)); + } tv_zixun.setGravity(Gravity.CENTER); tv_zixun.setOnClickListener(this); LinearLayout.LayoutParams lparams1 = new LinearLayout.LayoutParams( @@ -93,7 +102,11 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, tv_yuanchuang = new TextView(getActivity()); tv_yuanchuang.setText("原创"); - tv_yuanchuang.setTextColor(getResources().getColor(R.color.title)); + if (currentItem == 2) { + tv_yuanchuang.setTextColor(getResources().getColor(R.color.theme)); + } else { + tv_yuanchuang.setTextColor(getResources().getColor(R.color.title)); + } tv_yuanchuang.setGravity(Gravity.CENTER); tv_yuanchuang.setOnClickListener(this); LinearLayout.LayoutParams lparams2 = new LinearLayout.LayoutParams( @@ -103,7 +116,11 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, tv_gonglve = new TextView(getActivity()); tv_gonglve.setText("攻略"); - tv_gonglve.setTextColor(getResources().getColor(R.color.title)); + if (currentItem == 3) { + tv_gonglve.setTextColor(getResources().getColor(R.color.theme)); + } else { + tv_gonglve.setTextColor(getResources().getColor(R.color.title)); + } tv_gonglve.setGravity(Gravity.CENTER); tv_gonglve.setOnClickListener(this); LinearLayout.LayoutParams lparams3 = new LinearLayout.LayoutParams( diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index 3e2c5ae109..d31b31b679 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -55,7 +55,6 @@ import com.tencent.stat.StatConfig; import org.json.JSONException; import org.json.JSONObject; -import java.net.HttpURLConnection; import java.util.HashMap; import java.util.Map; diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/CommentService.java b/app/src/main/java/com/gh/gamecenter/retrofit/CommentService.java new file mode 100644 index 0000000000..9eb8cfff22 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/retrofit/CommentService.java @@ -0,0 +1,19 @@ +package com.gh.gamecenter.retrofit; + +import com.gh.gamecenter.entity.CommentnumEntity; + +import java.util.List; + +import retrofit2.http.GET; +import retrofit2.http.Path; +import rx.Observable; + +/** + * Created by LGT on 2016/11/9. + */ +public interface CommentService { + + @GET("article/{ids}/comment/num") // 获取新闻评论数 + Observable> getNewsCommentnum(@Path("ids") String ids); + +} diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/CommentServiceImpl.java b/app/src/main/java/com/gh/gamecenter/retrofit/CommentServiceImpl.java new file mode 100644 index 0000000000..167c8981eb --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/retrofit/CommentServiceImpl.java @@ -0,0 +1,33 @@ +package com.gh.gamecenter.retrofit; + +import com.gh.gamecenter.entity.CommentnumEntity; + +import java.util.List; + +import rx.Observable; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * Created by LGT on 2016/11/9. + */ +public class CommentServiceImpl { + + private CommentService commentService; + + public CommentServiceImpl(CommentService commentService) { + this.commentService = commentService; + } + + private void subscribe(Observable observable, Subscriber subscriber) { + observable.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(subscriber); + } + + public Observable> getNewsCommentnum(String ids) { + return commentService.getNewsCommentnum(ids); + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/DataServiceImpl.java b/app/src/main/java/com/gh/gamecenter/retrofit/DataServiceImpl.java index a0e03e71be..c35df6b33e 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/DataServiceImpl.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/DataServiceImpl.java @@ -26,8 +26,8 @@ public class DataServiceImpl { .subscribe(subscriber); } - public void getNewsViews(String ids, Response> subscriber) { - subscribe(dataService.getNewsViews(ids), subscriber); + public Observable> getNewsViews(String ids) { + return dataService.getNewsViews(ids); } public void postNewsViews(String news_id, JSONObjectResponse subscriber) { diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java b/app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java index bb371dab88..eabe52ef26 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java @@ -41,8 +41,13 @@ public class RetrofitManager { return getInstance().getDataServiceImpl(); } + public static CommentServiceImpl getComment() { + return getInstance().getCommentServiceImpl(); + } + private ApiServiceImpl apiServiceImpl; private DataServiceImpl dataServiceImpl; + private CommentServiceImpl commentServiceImpl; private String cachePath; private RetrofitManager() { @@ -72,6 +77,15 @@ public class RetrofitManager { .build() .create(DataService.class); this.dataServiceImpl = new DataServiceImpl(dataService); + + CommentService commentService = new Retrofit.Builder() + .client(okHttpClient) + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .baseUrl(Config.COMMENT_HOST) + .build() + .create(CommentService.class); + this.commentServiceImpl = new CommentServiceImpl(commentService); } public ApiServiceImpl getApiServiceImpl() { @@ -82,6 +96,10 @@ public class RetrofitManager { return dataServiceImpl; } + public CommentServiceImpl getCommentServiceImpl() { + return commentServiceImpl; + } + // 根据url获取缓存数据 public byte[] getCache(String url) { if (cachePath == null || url == null) { diff --git a/app/src/main/res/layout/news_digest_item.xml b/app/src/main/res/layout/news_digest_item.xml index e46e03192f..cf108cc7ca 100644 --- a/app/src/main/res/layout/news_digest_item.xml +++ b/app/src/main/res/layout/news_digest_item.xml @@ -83,18 +83,16 @@ android:layout_weight="1" android:layout_height="wrap_content" android:textColor="@color/hint" - android:layout_centerVertical="true" android:textSize="13sp"/> + android:textSize="13sp" /> @@ -130,8 +127,7 @@ android:layout_height="18dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" - android:src="@drawable/link_iv" - android:layout_gravity="left"/> + android:src="@drawable/link_iv"/> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 827e008bfe..5649a9925b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -24,5 +24,6 @@ Set accept time fail for %1$s. 100% + 999+