1. 程式人生 > >TouTiao開源項目 分析筆記19 問答內容

TouTiao開源項目 分析筆記19 問答內容

參數 style 隱藏 ectable selected 如何 click nal erl


1.真實頁面預覽

1.1.成果預覽

  技術分享圖片

  首先是問答列表

  然後每個item設置點擊事件,進入問答內容列表

  然後每一個問答內容也設置點擊事件,進入問答詳情

1.2.觸發事件。

  在WendaArticleOneImgViewBinder中,設置item的點擊事件,

  跳轉到WendaContentActivity。

  在WendaArticleTextViewBinder中,設置item的點擊事件,

  跳轉到WendaContentActivity。

  在WendaArticleThreeImgViewBinder中,設置item的點擊事件,

  跳轉到WendaContentActivity。


2.問答內容的活動頁面

2.1.源代碼  

public class WendaContentActivity extends BaseActivity {

    private static final String TAG = "WendaContentActivity";

    public static void launch(String qid) {
        InitApp.AppContext.startActivity(
new Intent(InitApp.AppContext, WendaContentActivity.class) .putExtra(TAG, qid) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.container); getSupportFragmentManager().beginTransaction() .replace(R.id.container, WendaContentFragment.newInstance(getIntent().getStringExtra(TAG))) .commit(); } }

2.2.需要的布局==>container.xml

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/viewBackground"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:layout="@layout/fragment_news_tab"/>

2.3.清單中活動配置

<activity
            android:name=".module.wenda.content.WendaContentActivity"
            android:configChanges="orientation|screenSize|uiMode"
            android:theme="@style/AppTheme.NoActionBar.Slidable"/>

2.4.現在還需要問答內容的片段了。


3.問答內容片段

3.1.底層接口==>IWendaContent 

public interface IWendaContent {

    interface View extends IBaseListView<Presenter> {

        /**
         * 請求數據
         */
        void onLoadData();

        /**
         * 刷新
         */
        void onRefresh();

        /**
         * 設置頂部信息
         */
        void onSetHeader(WendaContentBean.QuestionBean questionBean);
    }

    interface Presenter extends IBasePresenter {

        /**
         * 設置頂部信息
         */
        void doSetHeader(WendaContentBean.QuestionBean questionBean);

        /**
         * 請求數據
         */
        void doLoadData(String qid);

        /**
         * 再起請求數據
         */
        void doLoadMoreData();

        /**
         * 設置適配器
         */
        void doSetAdapter(List<WendaContentBean.AnsListBean> list);

        /**
         * 加載完畢
         */
        void doShowNoMore();
    }
}

3.2.源代碼 

public class WendaContentFragment extends BaseListFragment<IWendaContent.Presenter> implements IWendaContent.View {

    private static final String TAG = "WendaContentFragment";
    private String qid;
    private String shareTitle;
    private String shareUrl;
    private WendaContentBean.QuestionBean WendaContentHeaderBean;

    public static WendaContentFragment newInstance(String qid) {
        Bundle args = new Bundle();
        args.putString(TAG, qid);
        WendaContentFragment fragment = new WendaContentFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void setPresenter(IWendaContent.Presenter presenter) {
        if (null == presenter) {
            this.presenter = new WendaContentPresenter(this);
        }
    }

    @Override
    public void onSetAdapter(List<?> list) {
        Items newItems = new Items();
        newItems.add(WendaContentHeaderBean);
        newItems.addAll(list);
        newItems.add(new LoadingBean());
        DiffCallback.notifyDataSetChanged(oldItems, newItems, DiffCallback.WENDA_CONTENT, adapter);
        oldItems.clear();
        oldItems.addAll(newItems);
        canLoadMore = true;
    }

    @Override
    protected int attachLayoutId() {
        return R.layout.fragment_list_toolbar;
    }

    @Override
    protected void initView(View view) {
        super.initView(view);
        Toolbar toolbar = view.findViewById(R.id.toolbar);
        initToolBar(toolbar, true, getString(R.string.title_wenda));
        toolbar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                recyclerView.smoothScrollToPosition(0);
            }
        });
        toolbar.setBackgroundColor(SettingUtil.getInstance().getColor());

        adapter = new MultiTypeAdapter(oldItems);
        Register.registerWendaContentItem(adapter);
        recyclerView.setAdapter(adapter);
        recyclerView.addOnScrollListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                if (canLoadMore) {
                    canLoadMore = false;
                    presenter.doLoadMoreData();
                }
            }
        });
        setHasOptionsMenu(true);
    }

    @Override
    protected void initData() {
        this.qid = getArguments().getString(TAG);
        onLoadData();
    }

    @Override
    public void onLoadData() {
        onShowLoading();
        presenter.doLoadData(qid);
    }

    @Override
    public void onRefresh() {
        recyclerView.smoothScrollToPosition(0);
        presenter.doRefresh();
    }

    @Override
    public void onSetHeader(WendaContentBean.QuestionBean questionBean) {
        this.shareTitle = questionBean.getShare_data().getTitle();
        this.shareUrl = questionBean.getShare_data().getShare_url();
        this.WendaContentHeaderBean = questionBean;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu_wenda_content, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.action_wenda_share) {
            IntentAction.send(getActivity(), shareTitle + "\n" + shareUrl);
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void fetchData() {

    }
}

  ①新建一個實例,傳入一個問答id,返回一個片段。

  ②重寫設置處理器,新建了一個。

  ③重寫視圖層的設置適配器,傳入一個List,處理新老數據。

  ④重寫初始化視圖。

    獲取toolbar,並設置點擊事件。

    設置recyclerView的適配器,並設置滑動監聽事件。

    設置菜單。

  ⑤重寫初始化數據。

    從arguments獲取問答id。

    然後調用加載數據的函數。

  ⑥重寫加載數據的函數。

    先顯示Loading。

    然後調用處理器的加載函數。

  ⑦重寫刷新函數。

    先將recyclerView滑到最上面。

    然後調用處理器的刷新函數。

  ⑧重寫設置頭部。傳入一個Bean。獲取分享的標題和url。

  ⑨重寫菜單以及菜單的點擊事件。

3.3.需要的菜單布局  

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_wenda_share"
        android:icon="@drawable/ic_share_white_24dp"
        android:title="@string/action_share"
        app:showAsAction="ifRoom"/>

</menu>

  預覽頁面:

  技術分享圖片


4.設置處理器

4.1.處理器源代碼

public class WendaContentPresenter implements IWendaContent.Presenter {
    private static final String TAG = "WendaContentPresenter";
    private IWendaContent.View view;
    private String qid;
    private int niceOffset = 0;
    private int normalOffset = 0;
    private int niceAnsCount = 0;
    private int normalAnsCount = 0;
    private List<WendaContentBean.AnsListBean> ansList = new ArrayList<>();
    private String title;

    WendaContentPresenter(IWendaContent.View view) {
        this.view = view;
    }

    public void doRefresh() {
        if (ansList.size() != 0) {
            ansList.clear();
            niceOffset = 0;
            normalOffset = 0;
        }
        doLoadData(this.qid);
    }

    @Override
    public void doShowNetError() {
        view.onHideLoading();
        view.onShowNetError();
    }

    @Override
    public void doLoadData(String qid) {
        this.qid = qid;
        Log.d(TAG, "doLoadArticle: " + qid);

        RetrofitFactory.getRetrofit().create(IMobileWendaApi.class).getWendaNiceContent(qid)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<WendaContentBean>() {
                    @Override
                    public void accept(@NonNull WendaContentBean wendaContentBean) throws Exception {
                        doSetHeader(wendaContentBean.getQuestion());
                        doSetAdapter(wendaContentBean.getAns_list());
                        niceOffset += 10;
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(@NonNull Throwable throwable) throws Exception {
                        doShowNetError();
                        ErrorAction.print(throwable);
                    }
                });
    }

    @Override
    public void doLoadMoreData() {

        if (niceOffset < niceAnsCount) {
            RetrofitFactory.getRetrofit().create(IMobileWendaApi.class)
                    .getWendaNiceContentLoadMore(qid, niceOffset)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Consumer<WendaContentBean>() {
                        @Override
                        public void accept(@NonNull WendaContentBean wendaContentBean) throws Exception {
                            doSetAdapter(wendaContentBean.getAns_list());
                            niceOffset += 10;
                        }
                    }, new Consumer<Throwable>() {
                        @Override
                        public void accept(@NonNull Throwable throwable) throws Exception {
                            doShowNetError();
                            ErrorAction.print(throwable);
                        }
                    });
        } else if (normalOffset < normalAnsCount) {
            RetrofitFactory.getRetrofit().create(IMobileWendaApi.class)
                    .getWendaNormalContentLoadMore(qid, normalOffset)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Consumer<WendaContentBean>() {
                        @Override
                        public void accept(@NonNull WendaContentBean wendaContentBean) throws Exception {
                            doSetAdapter(wendaContentBean.getAns_list());
                            normalOffset += 10;
                        }
                    }, new Consumer<Throwable>() {
                        @Override
                        public void accept(@NonNull Throwable throwable) throws Exception {
                            doShowNetError();
                            ErrorAction.print(throwable);
                        }
                    });
        } else {
            doShowNoMore();
        }
    }

    @Override
    public void doSetAdapter(List<WendaContentBean.AnsListBean> list) {
        for (WendaContentBean.AnsListBean bean : list) {
            bean.setTitle(this.title);
            bean.setQid(this.qid);
        }
        ansList.addAll(list);
        view.onSetAdapter(ansList);
        view.onHideLoading();
    }

    @Override
    public void doSetHeader(WendaContentBean.QuestionBean questionBean) {
        this.niceAnsCount = questionBean.getNice_ans_count();
        this.normalAnsCount = questionBean.getNormal_ans_count();
        this.title = questionBean.getTitle();
        view.onSetHeader(questionBean);
    }

    @Override
    public void doShowNoMore() {
        view.onHideLoading();
        if (ansList.size() > 0) {
            view.onShowNoMore();
        }
    }
}

4.2.處理器的構造函數。

  傳入了一個視圖層,方便處理視圖。

4.3.刷新函數。

  將之前的列表清空,然後調用處理器的加載函數即可。

4.4.處理網絡異常。

4.5.處理器的加載函數。

  傳入了一個問答Id。

  調用API去請求問答內容。

  然後在subscribe進行下一步處理。

4.6.處理器的加載更多函數。

  沒有傳遞任何參數。

  調用API去請求問答更多內容。

  然後在subscribe中進行下一步處理。

4.7.處理器的設置適配器函數。

  傳遞了一個List。

  然後調用視圖層的設置適配器,並將這個List傳給它。

  

4.8.處理器的設置頭部。

  傳入了一個問題Bean類型。

  調用視圖層的設置頭部信息。

4.9.處理器的沒有更多了。

  調用視圖層的隱藏加載+沒有更多了。


5.註冊數據類型

5.1.統一管理

/**
     * 註冊問答內容
     * @param adapter
     */
    public static void registerWendaContentItem(@NonNull MultiTypeAdapter adapter) {
        adapter.register(WendaContentBean.QuestionBean.class, new WendaContentHeaderViewBinder());
        adapter.register(WendaContentBean.AnsListBean.class, new WendaContentViewBinder());
        adapter.register(LoadingBean.class, new LoadingViewBinder());
        adapter.register(LoadingEndBean.class, new LoadingEndViewBinder());
    }

5.2.問答頭部綁定器==>WendaContentHeaderViewBinder

  源代碼:

public class WendaContentHeaderViewBinder extends ItemViewBinder<WendaContentBean.QuestionBean, WendaContentHeaderViewBinder.ViewHolder> {

    @NonNull
    @Override
    protected WendaContentHeaderViewBinder.ViewHolder onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
        View view = inflater.inflate(R.layout.item_wenda_content_header, parent, false);
        return new ViewHolder(view);
    }

    @Override
    protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull final WendaContentBean.QuestionBean item) {
        try {
            String tv_title = item.getTitle();
            String tv_abstract = item.getContent().getText();

            String tv_answer_count = item.getNormal_ans_count() + item.getNice_ans_count() + " 回答";
            String tv_follow_count = item.getFollow_count() + " 關註";
            holder.tv_title.setText(tv_title);
            if (!TextUtils.isEmpty(tv_abstract)) {
                holder.tv_abstract.setText(tv_abstract);
            } else {
                holder.tv_abstract.setVisibility(View.GONE);
            }
            holder.tv_answer_count.setText(tv_answer_count);
            holder.tv_follow_count.setText(tv_follow_count);
            holder.title_view.setBackgroundColor(SettingUtil.getInstance().getColor());
        } catch (Exception e) {
            ErrorAction.print(e);
        }
    }


    public class ViewHolder extends RecyclerView.ViewHolder {

        private TextView tv_title;
        private TextView tv_abstract;
        private TextView tv_answer_count;
        private TextView tv_follow_count;
        private LinearLayout title_view;

        public ViewHolder(View itemView) {
            super(itemView);
            this.tv_title = itemView.findViewById(R.id.tv_title);
            this.tv_abstract = itemView.findViewById(R.id.tv_abstract);
            this.tv_answer_count = itemView.findViewById(R.id.tv_answer_count);
            this.tv_follow_count = itemView.findViewById(R.id.tv_follow_count);
            this.title_view = itemView.findViewById(R.id.title_view);
        }
    }
}

  需要的布局==>item_wenda_content.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:id="@+id/title_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="8dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="0dp">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="@style/TextAppearance.AppCompat.Title"
            android:textColor="@color/White"
            tools:text="都說床頭不能朝西,有什麽說法嗎?"/>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title_view"
        android:background="@color/viewBackground"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="8dp">

        <TextView
            android:id="@+id/tv_abstract"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            tools:text="都說床頭不能朝西,可是我家設計的兩個臥室都是不得不朝西的啊!有什麽不好嗎?"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/tv_answer_count"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="14sp"
                tools:text="602個回答"/>

            <TextView
                android:id="@+id/tv_follow_count"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:layout_marginStart="8dp"
                android:textSize="14sp"
                tools:text="68關註"/>

        </LinearLayout>
    </LinearLayout>

    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_below="@+id/content"
        android:background="@color/line_divider"/>

</RelativeLayout>

  預覽圖片:

  技術分享圖片

  

5.3.問答列表綁定視圖

  源代碼: 

public class WendaContentViewBinder extends ItemViewBinder<WendaContentBean.AnsListBean, WendaContentViewBinder.ViewHolder> {

    @NonNull
    @Override
    protected WendaContentViewBinder.ViewHolder onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
        View view = inflater.inflate(R.layout.item_wenda_content, parent, false);
        return new ViewHolder(view);
    }

    @Override
    protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull final WendaContentBean.AnsListBean item) {
        try {
            String iv_user_avatar = item.getUser().getAvatar_url();
            ImageLoader.loadCenterCrop(holder.itemView.getContext(), iv_user_avatar, holder.iv_user_avatar, R.color.viewBackground);
            String tv_user_name = item.getUser().getUname();
            String tv_like_count = item.getDigg_count() + "";
            String tv_abstract = item.getContent_abstract().getText();
            holder.tv_user_name.setText(tv_user_name);
            holder.tv_like_count.setText(tv_like_count);
            holder.tv_abstract.setText(tv_abstract);

            RxView.clicks(holder.itemView)
                    .throttleFirst(1, TimeUnit.SECONDS)
                    .subscribe(new Consumer<Object>() {
                        @Override
                        public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception {
                            //WendaDetailActivity.launch(item);
                        }
                    });
        } catch (Exception e) {
            ErrorAction.print(e);
        }
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private CircleImageView iv_user_avatar;
        private TextView tv_user_name;
        private TextView tv_like_count;
        private TextView tv_abstract;

        public ViewHolder(View itemView) {
            super(itemView);
            this.iv_user_avatar = itemView.findViewById(R.id.iv_user_avatar);
            this.tv_user_name = itemView.findViewById(R.id.tv_user_name);
            this.tv_like_count = itemView.findViewById(R.id.tv_like_count);
            this.tv_abstract = itemView.findViewById(R.id.tv_abstract);
        }
    }
}

  需要的item布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/viewBackground">

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/selectableItemBackground"
        android:foreground="?attr/selectableItemBackground"
        android:orientation="vertical"
        android:padding="16dp">

        <LinearLayout
            android:id="@+id/header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <com.jasonjan.headnews.widget.CircleImageView
                android:id="@+id/iv_user_avatar"
                android:layout_width="22dp"
                android:layout_height="22dp"
                android:scaleType="centerCrop"/>

            <TextView
                android:id="@+id/tv_user_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:layout_marginStart="8dp"
                android:ellipsize="end"
                android:maxLines="1"
                android:textAppearance="@style/TextAppearance.AppCompat.Caption"
                tools:text="用戶名"/>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical">

                <ImageView
                    android:id="@+id/iv_like"
                    android:layout_width="16dp"
                    android:layout_height="16dp"
                    android:layout_centerVertical="true"
                    android:layout_marginEnd="4dp"
                    android:layout_marginRight="4dp"
                    android:layout_toLeftOf="@+id/tv_like_count"
                    android:layout_toStartOf="@+id/tv_like_count"
                    app:srcCompat="@drawable/ic_like_gray_24dp"
                    tools:ignore="ContentDescription"/>

                <TextView
                    android:id="@+id/tv_like_count"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    tools:text="22"/>

            </RelativeLayout>
        </LinearLayout>

        <TextView
            android:id="@+id/tv_abstract"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dp"
            android:ellipsize="end"
            android:maxLines="6"
            tools:text="我去過印度,覺得印度人有時也太可愛了,在他們眼裏,印度幾乎就是唯一的,他們接受新事物的能力似乎非常的有限。但真心是想不到,印度居然還是IT大國。去過印度的人通常都會從導遊那裏知道:從新德裏出發到阿格拉的泰姬陵之間的一趟列車,時速最高的時候達到了160公裏/每小時,被印度人稱為當地最快的火車。因為印度人非常的熱情,看到中國遊客就會用蹩腳的漢語跟中國人搭訕,甚至會問:“中國有沒有這樣快的火車呀?”,這讓人尷尬不已,不知道如何回答是好。我在想如下回答,如何?----對不起,中國沒有時速160的火車,只有時速360的動車。----我們中國的火車坐的人少,拉輕,印度的火車超載了,跑不快,所以中國的火車要快一點。----你們印度人是坐在車外面的,所以感覺很快,我們的高鐵是坐裏面的,所以感覺不到快。"/>

    </LinearLayout>

    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_below="@+id/content"
        android:background="@color/line_divider"/>

</RelativeLayout>

  預覽效果:

  技術分享圖片


6.API請求IMobileWendaApi

6.1.獲取頭條問答優質回答 

/**
     * 獲取頭條問答優質回答
     * http://is.snssdk.com/wenda/v1/question/brow/?iid=10344168417&device_id=36394312781
     *
     * @param qid 問答ID
     */
    @POST("http://is.snssdk.com/wenda/v1/question/brow/?iid=10344168417&device_id=36394312781")
    @FormUrlEncoded
    Observable<WendaContentBean> getWendaNiceContent(@Field("qid") String qid);

  傳進來一個問答Id。

  傳出去Observable<WendaContentBean>。

6.2.獲取頭條問答優質回答的加載更多

/**
     * 獲取頭條問答優質回答(加載更多)
     * http://is.snssdk.com/wenda/v1/question/loadmore/?iid=10344168417&device_id=36394312781
     *
     * @param qid    問答ID
     * @param offset 偏移量
     */
    @POST("http://is.snssdk.com/wenda/v1/question/loadmore/?iid=10344168417&device_id=36394312781")
    @FormUrlEncoded
    Observable<WendaContentBean> getWendaNiceContentLoadMore(
            @Field("qid") String qid,
            @Field("offset") int offset);

  傳進來一個問答Id,一個偏移量。

  傳出去一個Observable<WendaContentBean>。

6.3.獲取頭條問答普通回答

/**
     * 獲取頭條問答普通回答
     * http://is.snssdk.com/wenda/v1/questionother/brow/?iid=10344168417&device_id=36394312781
     *
     * @param qid 問答ID
     */
    @POST("http://is.snssdk.com/wenda/v1/questionother/brow/?iid=10344168417&device_id=36394312781")
    @FormUrlEncoded
    Observable<WendaContentBean> getWendaNormalContent(@Field("qid") String qid);

  傳進來一個問答Id。

  傳出去一個Observable<WendaContentBean>。

6.4.獲取頭條問答普通回答的加載更多

 /**
     * 獲取頭條問答普通回答(加載更多)
     * http://is.snssdk.com/wenda/v1/questionother/loadmore/?iid=10344168417&device_id=36394312781
     *
     * @param qid    問答ID
     * @param offset 偏移量
     */
    @POST("http://is.snssdk.com/wenda/v1/questionother/loadmore/?iid=10344168417&device_id=36394312781")
    @FormUrlEncoded
    Observable<WendaContentBean> getWendaNormalContentLoadMore(
            @Field("qid") String qid,
            @Field("offset") int offset);

  傳進來一個問答Id,一個偏移量。

  傳出去一個Observable<WendaContentBean>。



TouTiao開源項目 分析筆記19 問答內容