1. 程式人生 > >Android專案okhttp請求+RecyclerView展示

Android專案okhttp請求+RecyclerView展示

準備階段:
1.網路請求使用okhttp:

compile'xyz.reginer.http:httplib:1.0.4'

2.介面展示使用RecyclerView:

compile 'xyz.reginer.baseadapter:baseadapter:1.1.2'
compile 'com.android.support:recyclerview-v7:25.0.0'

3.資料傳遞使用EventBus:

compile 'org.greenrobot:eventbus:3.0.0'

4.解析json使用Gson:

compile 'com.google.code.gson:gson:2.8.0'

5.圖片展示使用Glide:

compile 'com.github.bumptech.glide:glide:3.7.0'

開始擼程式碼:
1.使用RHttp請求網路資料並使用Gson解析同時使用EventBus傳遞資料:

public static void getJson() {
        RHttp.get().url("http://www.reginer.xyz/json/").build().execute(new BaseCallBack<Content>(Content.class) {
            @Override
            public
void onError(Call call, Exception e, int id) { } @Override public void onResponse(Content response, int id) { EventBus.getDefault().post(response); } }); }

如若攜帶引數可.params()或者.addParams()新增。

2.在BaseCallBack中解析json:

public abstract
class BaseCallBack<T> extends Callback<T> { private Class<T> clazz; protected BaseCallBack(Class<T> clazz) { this.clazz = clazz; } @Override public T parseNetworkResponse(Response response, int id) throws Exception { String string = response.body().string(); return json2Bean(string, clazz); } /** * 將json對映成bean物件 * * @param result * json字串 * @param clazz * bean物件位元組碼 */ private static <T> T json2Bean(String result, Class<T> clazz) { if (TextUtils.isEmpty(result)) return null; Gson gs = new Gson(); return gs.fromJson(result, clazz); } }

3.建立adapter繼承自CommonRvAdapter。

public class ContentAdapter extends CommonRvAdapter<Content.ItemBean>{

    public ContentAdapter(Context context, int layoutResId, List<Content.ItemBean> data) {
        super(context, layoutResId, data);
    }

    @Override
    public void convert(BaseAdapterHelper helper, Content.ItemBean item, int position) {

    }
}

如若根據item的不同型別顯示不同佈局,可重寫getLayoutResId方法:

@Override
    public int getLayoutResId(Content.ItemBean item, int position) {
        switch (item.getType()) {
            case 1:
                return R.layout.view_type1_layout;
            case 2:
                return R.layout.view_type2_layout;
        }

        return 0;
    }

在convert方法中設定控制元件內容:

@Override
    public void convert(BaseAdapterHelper helper, Content.ItemBean item, int position) {
        switch (item.getType()) {
            case 1:
                Glide.with(helper.getView().getContext()).load(item.getImage()).
                        centerCrop().crossFade().into((ImageView) helper.getView(R.id.iv_content));
                helper.setText(R.id.tv_content, item.getName());
                break;
            case 2:
                helper.setText(R.id.tv_content, item.getName());
                helper.setText(R.id.tv_description, item.getDescription());

                break;

        }
    }

4.在activity中初始化控制元件:

private void initView() {
        mList = new ArrayList<>();
        mAdapter = new ContentAdapter(this,-1,mList);
        RecyclerView mRvContent = (RecyclerView) findViewById(R.id.rv_content);
        mRvContent.setLayoutManager(new LinearLayoutManager(this));
        //設定分割線
        mRvContent.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
        mRvContent.setAdapter(mAdapter);
    }

註冊EventBus:
在onCreate中

EventBus.getDefault().register(this);

在onDestroy中

EventBus.getDefault().unregister(this);

或者在onStart(),onStop()中。

獲取EventBus返回值,重新整理Adapter:

@Subscribe(threadMode = ThreadMode.MAIN)
    public void getContent(Content content) {
         if (content.getCode()==200){
             mList.addAll(content.getItem());
             mAdapter.notifyDataSetChanged();
         }
    }

開始請求資料:

NetManager.getJson();

效果圖:
效果圖

新增item點選事件:

mAdapter.setOnItemClickListener(this);
@Override
    public void onItemClick(RecyclerView.ViewHolder viewHolder, View view, int position) {
        Toast.makeText(this,"position is::"+position,Toast.LENGTH_SHORT).show();
    }

新增item子項控制元件點選事件:
在Adapter的convert方法內新增:

setOnItemChildClickListener(helper,position,R.id.iv_content,R.id.tv_content);

Activity中新增:

mAdapter.setOnItemChildClickListener(this);
@Override
    public void onChildClick(View v, int position) {
        switch (v.getId()) {
                case R.id.iv_content:
                    Toast.makeText(this,"picture position is::"+position,Toast.LENGTH_SHORT).show();
                    break;

                default:
                    Toast.makeText(this,"child position is::"+position,Toast.LENGTH_SHORT).show();
                    break;
                }
    }

原始碼在這裡

————————完結——————————

相關推薦

Android專案okhttp請求+RecyclerView展示

準備階段: 1.網路請求使用okhttp: compile'xyz.reginer.http:httplib:1.0.4' 2.介面展示使用RecyclerView: compile 'xyz.reginer.baseadapter:basead

Okhttp網路請求+Recyclerview展示資料

首先匯入依賴 //Recyclerview是listview的升級版 implementation 'com.android.support:recyclerview-v7:28.0.0' //okhttp impleme

AndroidOkHttp請求自定義HTTPS證書介面設定

在請求安全性高的介面時,我們可能會使用到HTTPS介面,HTTPS可以理解為HTTP+TLS,關於HTTPS具體是怎麼工作的,可以看這篇文章:http://gold.xitu.io/entry/56ef

MVP框架搭建OkHttp做網路請求RecyClerView做列表展示頁面

首先匯入build.gradle中需要用到的依賴 implementation ‘com.google.code.gson:gson:2.8.5’ compile ‘com.android.support:recyclerview-v7:27.1.1’ compile ‘com.squa

Android Studio OkHttp+RecyclerView多條目展示資料

Android Studio OkHttp+RecyclerView多條目展示資料 使用到了Gson-2.3.1  okhttp:3.9.0 recyclerview-v7:26.1.0 匯入依賴 compile 'com.android.support:recycle

OkHttp網路載入資料+RecyclerView展示+屬性動畫

MainActivity.java public class MainActivity extends AppCompatActivity implements HttpUrls.ff{ private ImageView mImageView; private Rec

友盟登陸傳值+OkHttp+recyclerview展示瀑布流+跳轉Intent傳值+屬性動畫

友盟詳情見 https://blog.csdn.net/aijaijgnaw/article/details/84203936 分包 友盟第三方登入 MyApp(Application) package com.umeng.soexample.app; import and

Android OKhttp請求遇到的問題

剛開始學習Android網路請求記錄一下 OKhttp提示錯誤android.os.NetworkOnMainThreadException看意思就是不能再主執行緒中寫。 提示not permitted by network security poliy 看意思跟iOS裡面

Android OKhttp請求遇到的問題

剛開始學習Android網路請求記錄一下 OKhttp提示錯誤android.os.NetworkOnMainThreadException看意思就是不能再主執行緒中寫。 提示not permitted by network security poliy 看意

主流mwp框架+OKHttp網路請求xRecycleView展示

MainActivity package com.zjh.administrat.recyclerviewdemo3.view; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; imp

Android瀑布流優化,解決Recyclerview展示大批量圖片時Item自動切換、閃爍、空白等問題

本文涉及的程式碼案例可以在下方的連結中找到,如果對你有幫助,請給個Star(#^.^#)問題分析        這段時間業務需求用到RecyclerView瀑布流載入並展示大批量圖片,但一開始單純使用RecyclerView直接載入圖片,使得顯示上出現了滑動到頂端時閃爍,It

android,retrofit,okhttp,日誌攔截器,使用攔截器Interceptor統一列印請求與響應的json

   可以打印出傳遞的引數以及返回的結果 :  最下面有完整的 retrofit 案例 ------------------retrofit的使用----START-------------------------- 首先 : 依賴 : compile 'com.squ

構建Android專案之RxAndroid+Retrofit網路請求

注意 Retrofit 2.0+和Retrofit 2.0之前的版本語法上有差別,本文基於Retrofit2.1.0 什麼是Retrofit? retrofit是一款針對Android網路請求的開源框架,它與okhttp一樣出自Square公司。Rotrofit2.0的

androidOkhttp框架進行網路請求的工具類()

package com.example.utils; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterat

Android瀑布流優化,解決Recyclerview展示大批量圖片時Item自動切換、閃爍、空白等問題...

code小生,一個專注於 Android 領域的技術分享平臺作者:請抱抱陳先生地址:https:

androidokhttp post請求傳遞json資料

public final static int CONNECT_TIMEOUT = 60; public final static int READ_TIMEOUT = 100;

Android——使用OkHttp(含各種請求方法)

支援 SPDY ,共享同一個 Socket 來處理同一個伺服器的所有請求 1、如果 SPDY 不可用,則通過連線池來減少請求延時 2、無縫的支援GZIP來減少資料流量 3、快取響應資料來減少重複的網路請求 OkHttp 處理了很多網路疑難雜症:會從很多常

AndroidOkHttp 網路請求框架的學習封裝

自述:在此以前,自己從來沒有寫過部落格,今天是第一次寫,真心是有點小激動,正要下筆卻不知道應該從何說起,若是寫的不好,請各位見諒吧!關於網路請求,我自認為自己是一個菜鳥,沒有任何經驗,之前做的專案都是別人封裝好,告訴我怎麼呼叫就好了。至於怎麼封裝邏輯的,真是一竅不通,可近來

Android MVP,OkHttp,ImageLoader/Glide,介面回撥,RecyclerView,屬性動畫,自定義View/ViewGroup,Sqlite

 (一)    業務需求描述1.     完成如下三色梯頁面效果1)自定義ViewGroup的方式完成如圖一三色梯頁面效果,第一條紅色,第二條綠色,第三條藍色,依次迴圈,臺階上顯示第幾條臺階數,每臺階梯子佔控制元件寬度的1/3,垂直方向依次向下新增2)為自定義三色梯提供新增和

Android常用網路請求框架xUtils、OkHttp、Volley、Retorfit對比

網路請求框架總結1.xutils     此框架龐大而周全,這個框架可以網路請求,同時可以圖片載入,又可以資料儲存,又可以 View 註解,使用這種框架很方便,這樣會使得你整個專案對它依賴性太強,萬一以後這個庫不維護了,或者中間某個模組出問題了,這個影響非常大,所以在專案開發時,一般會更喜歡選擇專注某一領域