diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index bef9a46cd0..04accff0b5 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -56,6 +56,7 @@ public class EntranceUtils { public static final String KEY_PROLIST = "provinceList"; public static final String KEY_ORDER = "order"; public static final String KEY_TAGTYPE = "tagType"; + public static final String KEY_QUESTIONS_ID = "questionsId"; public static void jumpActivity(Context context, Bundle bundle) { diff --git a/app/src/main/java/com/gh/gamecenter/AskQuestionsDetailActivity.java b/app/src/main/java/com/gh/gamecenter/AskQuestionsDetailActivity.java index ce2b1c8424..1522508be7 100644 --- a/app/src/main/java/com/gh/gamecenter/AskQuestionsDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/AskQuestionsDetailActivity.java @@ -10,6 +10,7 @@ import android.widget.RelativeLayout; import com.gh.base.BaseActivity; import com.gh.common.util.DisplayUtils; +import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.ask.questionsdetail.AnswerEditFragment; import com.gh.gamecenter.ask.questionsdetail.AnswerFoldFragment; import com.gh.gamecenter.ask.questionsdetail.QuestionsDetailFragment; @@ -31,8 +32,12 @@ public class AskQuestionsDetailActivity extends BaseActivity implements Fragment private View mShareIv; private View mAnswerPost; - public static Intent getIntent(Context context) { - return new Intent(context, AskQuestionsDetailActivity.class); + private String mQuestionsId; + + public static Intent getIntent(Context context, String questionsId) { + Intent intent = new Intent(context, AskQuestionsDetailActivity.class); + intent.putExtra(EntranceUtils.KEY_QUESTIONS_ID, questionsId); + return intent; } @Override @@ -43,6 +48,8 @@ public class AskQuestionsDetailActivity extends BaseActivity implements Fragment @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mQuestionsId = getIntent().getStringExtra(EntranceUtils.KEY_QUESTIONS_ID); + getSupportFragmentManager().addOnBackStackChangedListener(this); show(QUESTIONS_DETAIL); @@ -98,7 +105,7 @@ public class AskQuestionsDetailActivity extends BaseActivity implements Fragment } private void showQuestionsDetail(String type) { - mQuestionsDetailFragment = new QuestionsDetailFragment(); + mQuestionsDetailFragment = QuestionsDetailFragment.getInstance(mQuestionsId); getSupportFragmentManager() .beginTransaction() .replace(R.id.layout_fragment_content, mQuestionsDetailFragment) diff --git a/app/src/main/java/com/gh/gamecenter/AskTabOrderActivity.java b/app/src/main/java/com/gh/gamecenter/AskTabOrderActivity.java index efcf718131..ae0298e6ce 100644 --- a/app/src/main/java/com/gh/gamecenter/AskTabOrderActivity.java +++ b/app/src/main/java/com/gh/gamecenter/AskTabOrderActivity.java @@ -60,6 +60,11 @@ public class AskTabOrderActivity extends BaseActivity { initTitle(getString(R.string.ask_tab_order_title)); mTagList = (List) HaloApp.get(ASK_TAGLIST, true); + AskTagGroupsEntity tagGroupsEntity = new AskTagGroupsEntity(); + tagGroupsEntity.setIcon("res:///" + R.drawable.ask_tab_all_icon); + tagGroupsEntity.setName("全部"); + mTagList.add(0, tagGroupsEntity); + final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java index eea81dbba7..a3580fe093 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java @@ -1,31 +1,105 @@ package com.gh.gamecenter.adapter; import android.content.Context; +import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; +import com.gh.base.OnListClickListener; import com.gh.common.constant.ItemViewType; +import com.gh.common.util.ImageUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.AskSelectGameItemViewHolder; import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; -import com.lightgame.adapter.BaseRecyclerAdapter; +import com.gh.gamecenter.ask.entity.AskGameSelectEntity; +import com.gh.gamecenter.ask.entity.MeEntity; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.LoadStatus; +import com.gh.gamecenter.manager.UserManager; + +import java.util.List; /** * Created by khy on 6/12/17. */ -public class AskSelectGameAdapter extends BaseRecyclerAdapter { +public class AskSelectGameAdapter extends ListAdapter { + + private OnListClickListener mListClickListener; + + private List mEntityList; private int mTitlePosition; - public AskSelectGameAdapter(Context context) { + private String mCommunityId; + + + public AskSelectGameAdapter(Context context, OnListClickListener listClickListener) { super(context); + mListClickListener = listClickListener; + mCommunityId = UserManager.getInstance().getCommunityId(mContext); + } + + @Override + protected void provideListData(List listData) { + mEntityList = (List) listData; + +// Collections.sort(mEntityList, new Comparator() { +// @Override +// public int compare(AskGameSelectEntity a1, AskGameSelectEntity a2) { +// return a1.getStatus() != null && a1.getStatus().equals(a2.getStatus()) ? 0 : 1; +// } +// }); + + for (int i = 0; i < mEntityList.size(); i++) { + AskGameSelectEntity entity = mEntityList.get(i); + if (i == 0) { + AskGameSelectEntity e = new AskGameSelectEntity(); + if ("opened".equals(entity.getStatus())) { + e.setId("已开通"); + mEntityList.add(i, e); + i++; + } else { + e.setId("投票中"); + mEntityList.add(i, e); + break; + } + } else { + AskGameSelectEntity lastEntity = mEntityList.get(i - 1); + String status = entity.getStatus(); + if (!TextUtils.isEmpty(status) && !status.equals(lastEntity.getStatus())) { // 已开通/投票中 断点 + mTitlePosition = i; + AskGameSelectEntity e = new AskGameSelectEntity(); + e.setId("投票中"); + mEntityList.add(i, e); + break; + } + } + } + + notifyDataSetChanged(); + } + + @Override + protected void loadChange(LoadStatus status) { + } @Override public int getItemViewType(int position) { - return super.getItemViewType(position); + if (position == getItemCount() - 1) { + return ItemViewType.ITEM_FOOTER; + } + + AskGameSelectEntity entity = mEntityList.get(position); + if ("投票中".equals(entity.getId()) || "已开通".equals(entity.getId())) { + return ItemViewType.ITEM_TOP; + } else { + return ItemViewType.ITEM_BODY; + } } @Override @@ -34,35 +108,71 @@ public class AskSelectGameAdapter extends BaseRecyclerAdapter { switch (viewType) { case ItemViewType.ITEM_BODY: view = mLayoutInflater.inflate(R.layout.ask_selectgame_item, parent, false); - return new AskSelectGameItemViewHolder(view); + return new AskSelectGameItemViewHolder(view, mEntityList, mListClickListener); case ItemViewType.ITEM_FOOTER: view = mLayoutInflater.inflate(R.layout.ask_selectgame_footer, parent, false); return new ReuseViewHolder(view); case ItemViewType.ITEM_TOP: view = mLayoutInflater.inflate(R.layout.area_title_item, parent, false); - return new ReuseViewHolder(view); + return new ReuseViewHolder(view, null, mListClickListener); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + AskGameSelectEntity entity; switch (getItemViewType(position)) { case ItemViewType.ITEM_BODY: + AskSelectGameItemViewHolder bodyHolder = (AskSelectGameItemViewHolder) holder; + entity = mEntityList.get(position); + bodyHolder.mName.setText(entity.getName()); + ImageUtils.Companion.display(bodyHolder.mIcon, entity.getGame().getIcon()); + if ("opened".equals(entity.getStatus())) { + bodyHolder.mVoteRl.setVisibility(View.GONE); + if (mCommunityId.equals(entity.getId())) { + bodyHolder.mSelecthint.setVisibility(View.VISIBLE); + } else { + bodyHolder.mSelecthint.setVisibility(View.GONE); + } + } else { + bodyHolder.mSelecthint.setVisibility(View.GONE); + bodyHolder.mVoteRl.setVisibility(View.VISIBLE); + bodyHolder.mVotecount.setText(entity.getVote() + "票"); + MeEntity me = entity.getMe(); + if (me != null && me.isCommunityVoted()) { + bodyHolder.mVoteBtn.setBackgroundResource(R.drawable.comment_border_bg); + bodyHolder.mVoteBtn.setTextColor(ContextCompat.getColor(mContext, R.color.theme)); + } else { + bodyHolder.mVoteBtn.setBackgroundResource(R.drawable.border_suggest_bg); + bodyHolder.mVoteBtn.setTextColor(ContextCompat.getColor(mContext, R.color.content)); + } + } + break; case ItemViewType.ITEM_FOOTER: break; case ItemViewType.ITEM_TOP: + entity = mEntityList.get(position); + ReuseViewHolder topHolder = (ReuseViewHolder) holder; + if (topHolder.itemView instanceof TextView) { + ((TextView) topHolder.itemView).setText(entity.getId()); + } break; } } @Override public int getItemCount() { - return 0; + return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; } public int getTitlePosition() { return mTitlePosition; } + + public void resetCommunityId(String id) { + mCommunityId = id; + notifyDataSetChanged(); + } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/AskTabOrderAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/AskTabOrderAdapter.java index a5ffb63451..d1ab7d5dfa 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/AskTabOrderAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/AskTabOrderAdapter.java @@ -33,21 +33,15 @@ public class AskTabOrderAdapter extends BaseRecyclerAdapter { @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof AskTabItemViewHolder) { - if (position == 0) { - AskTabItemViewHolder viewHolder = (AskTabItemViewHolder) holder; - ImageUtils.Companion.display(viewHolder.mTabItemIcon, "res:///" + R.drawable.ask_tab_all_icon); - viewHolder.mTabItemType.setText("全部"); - } else { - AskTagGroupsEntity tagEntity = mTagList.get(position - 1); - AskTabItemViewHolder viewHolder = (AskTabItemViewHolder) holder; - ImageUtils.Companion.display(viewHolder.mTabItemIcon, tagEntity.getIcon()); - viewHolder.mTabItemType.setText(tagEntity.getName()); - } + AskTagGroupsEntity tagEntity = mTagList.get(position); + AskTabItemViewHolder viewHolder = (AskTabItemViewHolder) holder; + ImageUtils.Companion.display(viewHolder.mTabItemIcon, tagEntity.getIcon()); + viewHolder.mTabItemType.setText(tagEntity.getName()); } } @Override public int getItemCount() { - return mTagList.size() + 1; + return mTagList.size(); } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/AskSelectGameItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/AskSelectGameItemViewHolder.java index 532a154518..74c9c59448 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/AskSelectGameItemViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/AskSelectGameItemViewHolder.java @@ -6,6 +6,7 @@ import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.BaseRecyclerViewHolder; +import com.gh.base.OnListClickListener; import com.gh.gamecenter.R; import butterknife.BindView; @@ -18,15 +19,23 @@ public class AskSelectGameItemViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.ask_selectgame_item_icon) public SimpleDraweeView mIcon; @BindView(R.id.ask_selectgame_item_votebtn) - public TextView mVotebtn; + public TextView mVoteBtn; @BindView(R.id.ask_selectgame_item_votecount) public TextView mVotecount; @BindView(R.id.ask_selectgame_item_voterl) public RelativeLayout mVoteRl; @BindView(R.id.ask_selectgame_item_selecthint) public TextView mSelecthint; + @BindView(R.id.ask_selectgame_item_name) + public TextView mName; public AskSelectGameItemViewHolder(View itemView) { super(itemView); } + + public AskSelectGameItemViewHolder(View itemView, Object data, OnListClickListener listClickListener) { + super(itemView, data, listClickListener); + itemView.setOnClickListener(this); + mVoteBtn.setOnClickListener(this); + } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/ReuseViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/ReuseViewHolder.java index c3b60a2e0e..b6500dc4ee 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/ReuseViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/ReuseViewHolder.java @@ -3,6 +3,7 @@ package com.gh.gamecenter.adapter.viewholder; import android.view.View; import com.gh.base.BaseRecyclerViewHolder; +import com.gh.base.OnListClickListener; /** * Created by LGT on 2016/8/12. @@ -13,4 +14,8 @@ public class ReuseViewHolder extends BaseRecyclerViewHolder { super(itemView); } + public ReuseViewHolder(View itemView, Object data, OnListClickListener listClickListener) { + super(itemView, data, listClickListener); + itemView.setOnClickListener(this); + } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskHotAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/AskHotAdapter.java index 2ed9771e3e..5dc19a3892 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskHotAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskHotAdapter.java @@ -11,7 +11,7 @@ import com.gh.common.constant.ItemViewType; import com.gh.common.util.ImageUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.ask.entity.AskEntity; +import com.gh.gamecenter.ask.entity.QuestionsEntity; import com.gh.gamecenter.ask.entity.AskQuestionsEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.LoadStatus; @@ -27,7 +27,7 @@ public class AskHotAdapter extends ListAdapter { private OnListClickListener mListClickListener; - private List mEntityList; + private List mEntityList; public AskHotAdapter(Context context, OnListClickListener listClickListener) { super(context); @@ -37,7 +37,7 @@ public class AskHotAdapter extends ListAdapter { @NonNull @Override protected void provideListData(List listData) { - mEntityList = (List) listData; + mEntityList = (List) listData; notifyDataSetChanged(); } @@ -82,7 +82,7 @@ public class AskHotAdapter extends ListAdapter { public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { case ItemViewType.ITEM_BODY: - AskEntity askEntity = mEntityList.get(position); + QuestionsEntity askEntity = mEntityList.get(position); AskItemViewHolder askHolder = (AskItemViewHolder) holder; askHolder.mAskContent.setText(askEntity.getBrief()); askHolder.mAskVotecount.setText(mContext.getString(R.string.ask_vote_count, askEntity.getVote())); diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskHotFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskHotFragment.java index 53a31ea18f..36425e2daa 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskHotFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskHotFragment.java @@ -1,14 +1,16 @@ package com.gh.gamecenter.ask; +import android.os.Bundle; +import android.support.annotation.Nullable; import android.view.View; -import com.gh.gamecenter.AskQuestionsDetailActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.ask.entity.AskEntity; +import com.gh.gamecenter.ask.entity.QuestionsEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.LoadStatus; import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.retrofit.RetrofitManager; import java.util.List; @@ -25,9 +27,15 @@ public class AskHotFragment extends ListFragment { private String mCommunityId; + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mCommunityId = UserManager.getInstance().getCommunityId(getContext()); + } + @SuppressWarnings("unchecked") @Override - public Observable> provideDataObservable() { + public Observable> provideDataObservable() { return RetrofitManager.getInstance(getContext()).getApi().getAskHot(mCommunityId, getListOffset()); } @@ -46,7 +54,7 @@ public class AskHotFragment extends ListFragment { } break; case R.id.ask_item_constraintlayout: - startActivity(AskQuestionsDetailActivity.getIntent(getContext())); +// startActivity(AskQuestionsDetailActivity.getIntent(getContext())); // todo mQuestionsId break; } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/ask/AskItemViewHolder.java index a87ca99370..9b2e4c547d 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskItemViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskItemViewHolder.java @@ -34,4 +34,6 @@ public class AskItemViewHolder extends BaseRecyclerViewHolder { super(itemView, data, listClickListener); itemView.setOnClickListener(this); } + + } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsBodyAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsBodyAdapter.java index d8334aa6a5..72aabd1584 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsBodyAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsBodyAdapter.java @@ -9,7 +9,7 @@ import com.gh.base.OnListClickListener; import com.gh.common.constant.ItemViewType; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.ask.entity.AskEntity; +import com.gh.gamecenter.ask.entity.QuestionsEntity; import com.gh.gamecenter.ask.entity.AskQuestionsEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.LoadStatus; @@ -24,7 +24,7 @@ public class AskQuestionsBodyAdapter extends ListAdapter { private OnListClickListener mListClickListener; - private List mEntityList; + private List mEntityList; public AskQuestionsBodyAdapter(Context context, OnListClickListener listClickListener) { @@ -34,7 +34,7 @@ public class AskQuestionsBodyAdapter extends ListAdapter { @Override protected void provideListData(List listData) { - mEntityList = (List) listData; + mEntityList = (List) listData; notifyDataSetChanged(); } @@ -79,7 +79,7 @@ public class AskQuestionsBodyAdapter extends ListAdapter { public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { case ItemViewType.ITEM_BODY: - AskEntity askEntity = mEntityList.get(position); + QuestionsEntity askEntity = mEntityList.get(position); AskQuestionItemViewHolder askHolder = (AskQuestionItemViewHolder) holder; askHolder.mAnswerCount.setText(mContext.getString(R.string.ask_answer_count, askEntity.getAnswers())); AskQuestionsEntity question = askEntity.getQuestion(); diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsBodyFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsBodyFragment.java index d601134947..d3eebffc94 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsBodyFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsBodyFragment.java @@ -1,13 +1,16 @@ package com.gh.gamecenter.ask; +import android.os.Bundle; +import android.support.annotation.Nullable; import android.view.View; import com.gh.gamecenter.R; -import com.gh.gamecenter.ask.entity.AskEntity; +import com.gh.gamecenter.ask.entity.QuestionsEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.LoadStatus; import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.retrofit.RetrofitManager; import java.util.List; @@ -25,6 +28,12 @@ public class AskQuestionsBodyFragment extends ListFragment { private String mCommunityId; + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mCommunityId = UserManager.getInstance().getCommunityId(getContext()); + } + @Override protected ListAdapter provideListAdapter() { return mAdapter == null ? mAdapter = new AskQuestionsBodyAdapter(getContext(), this) : mAdapter; @@ -32,7 +41,7 @@ public class AskQuestionsBodyFragment extends ListFragment { @SuppressWarnings("unchecked") @Override - public Observable> provideDataObservable() { + public Observable> provideDataObservable() { return RetrofitManager.getInstance(getContext()).getApi().getAskQuestions(mCommunityId, getListOffset()); } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsFragment.java index 01c3da978c..0552c74293 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsFragment.java @@ -18,6 +18,7 @@ import com.gh.common.view.TabIndicatorView; import com.gh.gamecenter.AskTabOrderActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.ask.entity.AskTagGroupsEntity; +import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.lightgame.view.NoScrollableViewPager; @@ -60,6 +61,12 @@ public class AskQuestionsFragment extends BaseFragment { private String mCommunityId; + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mCommunityId = UserManager.getInstance().getCommunityId(getContext()); + } + @Override protected int getLayoutId() { return R.layout.fragment_ask_questions; diff --git a/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java b/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java index 408aab1729..9b46e90997 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java @@ -3,50 +3,59 @@ package com.gh.gamecenter.ask; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; +import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.AskSelectGameAdapter; -import com.gh.gamecenter.normal.NormalFragment; +import com.gh.gamecenter.ask.entity.AskGameSelectEntity; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; import butterknife.BindView; +import rx.Observable; /** * Created by khy on 11/12/17. */ -public class SelectGameFragment extends NormalFragment { +public class SelectGameFragment extends ListFragment { - @BindView(R.id.ask_selectgame_rv) - RecyclerView mRecyclerView; @BindView(R.id.ask_selectgame_rv_title) TextView mRvTitle; private AskSelectGameAdapter mAdapter; - private LinearLayoutManager mLayoutManager; private RelativeLayout.LayoutParams mParams; + @Override + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new AskSelectGameAdapter(getContext(), this) : mAdapter; + } + @Override protected int getLayoutId() { return R.layout.fragment_ask_selectgame; } + @Override + protected RecyclerView.ItemDecoration getItemDecoration() { + return new VerticalItemDecoration(getContext(), 1, true); + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - initTitle(getString(R.string.title_select_game)); - mAdapter = new AskSelectGameAdapter(getContext()); mParams = (RelativeLayout.LayoutParams) mRvTitle.getLayoutParams(); - mLayoutManager = new LinearLayoutManager(getContext()); - mRecyclerView.setLayoutManager(mLayoutManager); - mRecyclerView.setAdapter(mAdapter); - mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); @@ -75,4 +84,29 @@ public class SelectGameFragment extends NormalFragment { }); } + @Override + public Observable> provideDataObservable() { + return RetrofitManager.getInstance(getContext()).getApi().getAskGameSelect(); + } + + + @Override + public void onListClick(View view, int position, Object data) { + super.onListClick(view, position, data); + switch (view.getId()) { + case R.id.ask_selectgame_item_constraintlayout: + List list = (List) data; + AskGameSelectEntity entity = list.get(position); + if ("opened".equals(entity.getStatus())) { + UserManager.getInstance().setCommunityId(getContext(), entity.getId()); + mAdapter.resetCommunityId(entity.getId()); + } + break; + case R.id.ask_selectgame_footer: + break; + case R.id.ask_selectgame_item_votebtn: + break; + + } + } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/entity/AnswerEntity.kt b/app/src/main/java/com/gh/gamecenter/ask/entity/AnswerEntity.kt new file mode 100644 index 0000000000..2f8d117e85 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/entity/AnswerEntity.kt @@ -0,0 +1,22 @@ +package com.gh.gamecenter.ask.entity + +import com.gh.gamecenter.entity.UserEntity +import com.google.gson.annotations.SerializedName + +/** + * Created by khy on 12/12/17. + */ +class AnswerEntity { + + @SerializedName("_id") + var id: String? = null + + var brief: String? = null + + var images: List? = null + + var vote: Int = 0 + + var user: UserEntity? = null + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/ask/entity/CommunitiesEntity.kt b/app/src/main/java/com/gh/gamecenter/ask/entity/AskGameSelectEntity.kt similarity index 92% rename from app/src/main/java/com/gh/gamecenter/ask/entity/CommunitiesEntity.kt rename to app/src/main/java/com/gh/gamecenter/ask/entity/AskGameSelectEntity.kt index fc8be8b4a0..c3d547704c 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/entity/CommunitiesEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/ask/entity/AskGameSelectEntity.kt @@ -5,7 +5,7 @@ import com.google.gson.annotations.SerializedName /** * Created by khy on 11/12/17. */ -class CommunitiesEntity { +class AskGameSelectEntity { @SerializedName("_id") var id: String? = null diff --git a/app/src/main/java/com/gh/gamecenter/ask/entity/MeEntity.kt b/app/src/main/java/com/gh/gamecenter/ask/entity/MeEntity.kt index 40307acdf9..3dd102c394 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/entity/MeEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/ask/entity/MeEntity.kt @@ -7,5 +7,5 @@ import com.google.gson.annotations.SerializedName */ class MeEntity { @SerializedName("is_community_voted") - var isCommunityVoted: String? = null + var isCommunityVoted: Boolean = false } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/ask/entity/AskEntity.kt b/app/src/main/java/com/gh/gamecenter/ask/entity/QuestionsEntity.kt similarity index 94% rename from app/src/main/java/com/gh/gamecenter/ask/entity/AskEntity.kt rename to app/src/main/java/com/gh/gamecenter/ask/entity/QuestionsEntity.kt index 2aa8ad0f75..80081b8bc4 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/entity/AskEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/ask/entity/QuestionsEntity.kt @@ -6,7 +6,7 @@ import com.google.gson.annotations.SerializedName /** * Created by khy on 11/12/17. */ -class AskEntity { +class QuestionsEntity { @SerializedName("_id") var id: String? = null diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldAdapter.java index 0b22e7c603..a10909832a 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldAdapter.java @@ -15,6 +15,7 @@ import java.util.List; public class AnswerFoldAdapter extends ListAdapter { + public AnswerFoldAdapter(Context context) { super(context); } diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java index fdd719251c..024d83a0c8 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java @@ -1,8 +1,9 @@ package com.gh.gamecenter.ask.questionsdetail; +import com.gh.gamecenter.ask.entity.AnswerEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; -import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.retrofit.RetrofitManager; import java.util.List; @@ -14,11 +15,13 @@ import rx.Observable; public class AnswerFoldFragment extends ListFragment { - AnswerFoldAdapter mAdapter; + private AnswerFoldAdapter mAdapter; + + private String mQuestionsId; @Override - public Observable> provideDataObservable() { - return null; + public Observable> provideDataObservable() { + return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, true); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java index 633e3cbb00..1fce521ee0 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java @@ -12,6 +12,7 @@ import com.gh.common.constant.ItemViewType; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; import com.gh.gamecenter.ask.AskItemViewHolder; +import com.gh.gamecenter.ask.entity.QuestionsEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.LoadStatus; @@ -25,11 +26,17 @@ public class QuestionsDetailAdapter extends ListAdapter { private OnListClickListener mListClickListener; + private QuestionsEntity mAskEntity; + public QuestionsDetailAdapter(Context context, OnListClickListener listClickListener) { super(context); mListClickListener = listClickListener; } + public void setQuestionsEntity(QuestionsEntity askEntity) { + mAskEntity = askEntity; + } + @Override protected void provideListData(List listData) { diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java index 227040bd69..f1b17261c1 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java @@ -2,22 +2,29 @@ package com.gh.gamecenter.ask.questionsdetail; import android.arch.lifecycle.Lifecycle; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.View; import android.widget.RelativeLayout; +import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.AskQuestionsDetailActivity; import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.ask.entity.QuestionsEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; -import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; import java.util.List; import butterknife.BindView; import butterknife.OnClick; +import retrofit2.HttpException; import rx.Observable; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; /** * Created by khy on 7/12/17. @@ -30,22 +37,39 @@ public class QuestionsDetailFragment extends ListFragment { @BindView(R.id.questionsdetail_invite) RelativeLayout mInvite; - QuestionsDetailAdapter mAdapter; + private QuestionsDetailAdapter mAdapter; + private String mQuestionsId; + + public static QuestionsDetailFragment getInstance(String questionsId) { + QuestionsDetailFragment fragment = new QuestionsDetailFragment(); + Bundle args = new Bundle(); + args.putString(EntranceUtils.KEY_QUESTIONS_ID, questionsId); + fragment.setArguments(args); + return fragment; + } @Override protected ListAdapter provideListAdapter() { return mAdapter == null ? mAdapter = new QuestionsDetailAdapter(getContext(), this) : mAdapter; } + @Override + protected boolean isAutomaticLoad() { + return false; + } + @Override protected int getLayoutId() { return R.layout.fragment_questionsdetail; } @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle arguments = getArguments(); + if (arguments != null) mQuestionsId = arguments.getString(EntranceUtils.KEY_QUESTIONS_ID); + getQuestionsDetail(); } @OnClick({R.id.questionsdetail_answer, R.id.questionsdetail_invite}) @@ -63,7 +87,28 @@ public class QuestionsDetailFragment extends ListFragment { } @Override - public Observable> provideDataObservable() { - return null; + public Observable> provideDataObservable() { + return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, false); + } + + public void getQuestionsDetail() { + RetrofitManager.getInstance(getContext()).getApi() + .getQuestionsById(mQuestionsId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(QuestionsEntity response) { + super.onResponse(response); + mAdapter.setQuestionsEntity(response); + mListViewModel.load(LoadType.NORMAL); + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + onLoadError(); + } + }); } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/viewmodel/SelectGameViewModel.java b/app/src/main/java/com/gh/gamecenter/ask/viewmodel/SelectGameViewModel.java new file mode 100644 index 0000000000..85aceb8ad2 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/viewmodel/SelectGameViewModel.java @@ -0,0 +1,17 @@ +package com.gh.gamecenter.ask.viewmodel; + +import android.app.Application; +import android.arch.lifecycle.AndroidViewModel; +import android.support.annotation.NonNull; + +/** + * Created by khy on 12/12/17. + */ + +public class SelectGameViewModel extends AndroidViewModel { + + + public SelectGameViewModel(@NonNull Application application) { + super(application); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java b/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java index 8b73193b78..e4f3cbec14 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java @@ -12,9 +12,9 @@ import android.view.View; import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; +import com.gh.gamecenter.normal.NormalFragment; import java.util.List; @@ -25,43 +25,53 @@ import butterknife.OnClick; * Created by khy on 2/12/17. */ -public abstract class ListFragment extends BaseFragment implements +public abstract class ListFragment extends NormalFragment implements Observer>, OnListLoadListener, SwipeRefreshLayout.OnRefreshListener { @BindView(R.id.list_rv) - RecyclerView mListRv; + protected RecyclerView mListRv; @BindView(R.id.list_refresh) - SwipeRefreshLayout mListRefresh; + protected SwipeRefreshLayout mListRefresh; @BindView(R.id.list_loading) - ProgressBarCircularIndeterminate mListLoading; + protected ProgressBarCircularIndeterminate mListLoading; @BindView(R.id.reuse_no_connection) - LinearLayout mReuseNoConn; + protected LinearLayout mReuseNoConn; @BindView(R.id.reuse_none_data) - LinearLayout mReuseNoData; + protected LinearLayout mReuseNoData; - private LinearLayoutManager mLayoutManager; + protected LinearLayoutManager mLayoutManager; protected ListViewModel mListViewModel; protected abstract ListAdapter provideListAdapter(); + protected RecyclerView.ItemDecoration getItemDecoration() { + return new VerticalItemDecoration(getContext(), 8, true); + } @Override protected int getLayoutId() { return R.layout.fragment_list_base; } + /** + * 是否自动加载 + */ + protected boolean isAutomaticLoad() { + return true; + } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ListViewModel.Factory factory = new ListViewModel.Factory(getActivity().getApplication(), this); mListViewModel = ViewModelProviders.of(this, factory).get(ListViewModel.class); mListViewModel.getObsListData().observe(this, this); - mListViewModel.load(LoadType.NORMAL); + if (isAutomaticLoad()) mListViewModel.load(LoadType.NORMAL); - mListRv.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true)); + mListRv.addItemDecoration(getItemDecoration()); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/login/UserRepository.java b/app/src/main/java/com/gh/gamecenter/login/UserRepository.java index c8efc482eb..13bff64797 100644 --- a/app/src/main/java/com/gh/gamecenter/login/UserRepository.java +++ b/app/src/main/java/com/gh/gamecenter/login/UserRepository.java @@ -206,8 +206,8 @@ class UserRepository { } @Override - public void onFailure(ApiResponse e) { - super.onFailure(e); + public void onApiFailure(ApiResponse e) { + super.onApiFailure(e); try { HttpException httpException = e.getHttpException(); ApiResponse value = new ApiResponse<>(); @@ -261,8 +261,8 @@ class UserRepository { } @Override - public void onFailure(ApiResponse e) { - super.onFailure(e); + public void onApiFailure(ApiResponse e) { + super.onApiFailure(e); try { HttpException httpException = e.getHttpException(); @@ -332,8 +332,8 @@ class UserRepository { } @Override - public void onFailure(ApiResponse e) { - super.onFailure(e); + public void onApiFailure(ApiResponse e) { + super.onApiFailure(e); HttpException httpException = e.getHttpException(); ApiResponse value = new ApiResponse<>(); @@ -405,8 +405,8 @@ class UserRepository { } @Override - public void onFailure(ApiResponse e) { - super.onFailure(e); + public void onApiFailure(ApiResponse e) { + super.onApiFailure(e); mLoginObsResponseUserInfo.postValue(e); if (loginTag != null) { logout(); diff --git a/app/src/main/java/com/gh/gamecenter/manager/UserManager.java b/app/src/main/java/com/gh/gamecenter/manager/UserManager.java index fab3714e11..ad47c8b340 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/UserManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/UserManager.java @@ -1,5 +1,8 @@ package com.gh.gamecenter.manager; +import android.content.Context; +import android.preference.PreferenceManager; + import com.gh.gamecenter.entity.LoginTokenEntity; import com.gh.gamecenter.entity.UserInfoEntity; @@ -8,6 +11,7 @@ import com.gh.gamecenter.entity.UserInfoEntity; */ public class UserManager { + private final String COMMUNITY_ID = "CommunityId"; private static volatile UserManager singleton; @@ -15,6 +19,8 @@ public class UserManager { private LoginTokenEntity mLoginTokenEntity; + private String mCommunityId; + public static UserManager getInstance() { if (singleton == null) { synchronized (UserManager.class) { @@ -47,6 +53,20 @@ public class UserManager { return null; } + public void setCommunityId(Context context, String communityId) { + if (!mCommunityId.equals(communityId)) { + PreferenceManager.getDefaultSharedPreferences(context).edit().putString(COMMUNITY_ID, communityId).apply(); + } + this.mCommunityId = communityId; + } + + public String getCommunityId(Context context) { + if (mCommunityId == null) { + mCommunityId = PreferenceManager.getDefaultSharedPreferences(context).getString(COMMUNITY_ID, ""); + } + return mCommunityId; + } + public void logout() { mUserInfoEntity = null; mLoginTokenEntity = null; diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/Response.java b/app/src/main/java/com/gh/gamecenter/retrofit/Response.java index 5adfd37f53..172cdf892a 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/Response.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/Response.java @@ -35,10 +35,10 @@ public class Response extends Subscriber { onFailure((HttpException) e); } else { e1.setThrowable(e); -// onFailure(null); // 注意kotlin的no-null限制 // TODO 暂时搁置 + onFailure(null); // 注意kotlin的no-null限制 // } - onFailure(e1); + onApiFailure(e1); } @Override @@ -54,11 +54,7 @@ public class Response extends Subscriber { } - public void onFailure(Throwable e) { - - } - - public void onFailure(ApiResponse e) { + public void onApiFailure(ApiResponse e) { } diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 6c327a9f8a..1cfa033205 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -1,6 +1,8 @@ package com.gh.gamecenter.retrofit.service; -import com.gh.gamecenter.ask.entity.AskEntity; +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.ask.entity.QuestionsEntity; +import com.gh.gamecenter.ask.entity.AskGameSelectEntity; import com.gh.gamecenter.ask.entity.AskTagGroupsEntity; import com.gh.gamecenter.entity.AppEntity; import com.gh.gamecenter.entity.CommentEntity; @@ -680,17 +682,27 @@ public interface ApiService { @POST("message/user/comment/confirm/read") Observable postMarkCommentRead(); + + /****** 问答(社区相关) *******/ + + /** + * 社区列表 + */ + + @GET("communities") + Observable> getAskGameSelect(); + /** * 获取社区首页精选 */ @GET("communities/{community_id}/choiceness") - Observable> getAskHot(@Path("community_id") String communityId, @Query("offset") int offset); + Observable> getAskHot(@Path("community_id") String communityId, @Query("offset") int offset); /** * 获取社区首页-问题列表 */ @GET("communities/{community_id}/questions") - Observable> getAskQuestions(@Path("community_id") String communityId, @Query("offset") int offset); + Observable> getAskQuestions(@Path("community_id") String communityId, @Query("offset") int offset); /** * 获取社区首页栏目 @@ -698,4 +710,16 @@ public interface ApiService { @GET("communities/{community_id}/tag_groups") Observable> getAskTagGroups(@Path("community_id") String communityId); + /** + * 社区问题详情 + */ + @GET("questions/{questions_id}") + Observable getQuestionsById(@Path("community_id") String questionsId); + + /** + * 社区问题的答案列表 + */ + @GET("questions/{questions_id}/answers") + Observable> getQuestionsAnswer(@Path("community_id") String questionsId, @Query("fold") boolean isFold); + } \ No newline at end of file diff --git a/app/src/main/res/layout/ask_selectgame_footer.xml b/app/src/main/res/layout/ask_selectgame_footer.xml index 0add1eb87e..9e1b59fd22 100644 --- a/app/src/main/res/layout/ask_selectgame_footer.xml +++ b/app/src/main/res/layout/ask_selectgame_footer.xml @@ -1,5 +1,6 @@ - - + + + android:layout_height = "wrap_content" /> - - - \ No newline at end of file + + + + + + + + + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ac1ffc7672..8d91538da6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -49,13 +49,13 @@ USERSEA_APP_ID=2017101012 USERSEA_APP_SECRET=597aa2b463f5770013146675 # hosts -DEV_API_HOST=https\://dev.api.ghzs666.com/v3d0/ -DEV_LIBAO_HOST=https\://dev.api.ghzs666.com/v3d0/ -DEV_MESSAGE_HOST=https\://dev.api.ghzs666.com/v3d0/ -DEV_USER_HOST=https\://dev.api.ghzs666.com/v3d0/ -DEV_COMMENT_HOST=https\://dev.api.ghzs666.com/v3d0/ +DEV_API_HOST=https\://dev.api.ghzs666.com/v3d1/ +DEV_LIBAO_HOST=https\://dev.api.ghzs666.com/v3d1/ +DEV_MESSAGE_HOST=https\://dev.api.ghzs666.com/v3d1/ +DEV_USER_HOST=https\://dev.api.ghzs666.com/v3d1/ +DEV_COMMENT_HOST=https\://dev.api.ghzs666.com/v3d1/ DEV_DATA_HOST=http\://data.ghzs666.com/ -DEV_USERSEA_HOST=https\://dev.usersea.ghzs666.com/v1d0/ +DEV_USERSEA_HOST=https\://dev.usersea.ghzs666.com/v1d1/ API_HOST=https\://api.ghzs.com/v3d0/ LIBAO_HOST=https\://api.ghzs.com/v3d0/