(仿头条APP项目)4.父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据
生活随笔
收集整理的這篇文章主要介紹了
(仿头条APP项目)4.父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 父類BaseFragment創(chuàng)建,用retrofit和gson獲取并解析服務器端數(shù)據(jù)
- 效果展示
- 創(chuàng)建父類BaseFragment解決代碼重復問題
- 用retrofit和gson獲取并解析服務器端數(shù)據(jù)
- 前期準備
- 導入依賴
- 獲取網(wǎng)絡權限
- 具體實現(xiàn)
- 創(chuàng)建Api,retrofit方法與注解實現(xiàn)類
- 復制服務端數(shù)據(jù),利用GsonFormat快速創(chuàng)建Bean類
- 在首頁Fragment編寫相應代碼
父類BaseFragment創(chuàng)建,用retrofit和gson獲取并解析服務器端數(shù)據(jù)
效果展示
創(chuàng)建父類BaseFragment解決代碼重復問題
在昨天的開發(fā)中,利用了判斷成員變量View是否為空解決數(shù)據(jù)丟失問題,ViewGroup的remove來解決重用parent問題。而這是每個Fragment都會產(chǎn)生的問題,每個都有相同的代碼處理,這樣不好。所以創(chuàng)建了一個所有Fragment界面的父類來解決這個問題
BaseFragment
所有Fragment頁面繼承BaseFragment 并重寫getMyView()方法
import android.graphics.Color; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import com.xzit.fragment.BaseFragment;public class Page1Fragment extends BaseFragment {@Overrideprotected View getMyView() {TextView textView= new TextView(getActivity());textView.setBackgroundColor(Color.GRAY);textView.setText("北京");textView.setTextSize(60);textView.setGravity(Gravity.CENTER);return textView;} }用retrofit和gson獲取并解析服務器端數(shù)據(jù)
前期準備
導入依賴
//配置retrofit
implementation ‘com.squareup.retrofit2:retrofit:2.1.0’
implementation ‘com.squareup.retrofit2:converter-gson:2.1.0’
//gson
implementation ‘com.google.code.gson:gson:2.8.4’
獲取網(wǎng)絡權限
具體實現(xiàn)
創(chuàng)建Api,retrofit方法與注解實現(xiàn)類
復制服務端數(shù)據(jù),利用GsonFormat快速創(chuàng)建Bean類
在首頁Fragment編寫相應代碼
HomeFragment
import android.graphics.Color; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView;import com.example.administrator.zhjrtt.R; import com.google.gson.Gson; import com.xzit.bean.ResponseDate; import com.xzit.fragment.sub.Page1Fragment; import com.xzit.fragment.sub.Page2Fragment; import com.xzit.fragment.sub.Page3Fragment; import com.xzit.fragment.sub.Page4Fragment; import com.xzit.fragment.sub.Page5Fragment; import com.xzit.net.MyApi;import java.util.ArrayList; import java.util.List;import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory;public class HomeFragment extends BaseFragment {class MyPagerAdapter extends FragmentPagerAdapter{//創(chuàng)建集合存放頁面private List<ResponseDate.DataBean> dates = new ArrayList<>();//創(chuàng)建集合存放指示器標題private List<Fragment> fragments = new ArrayList<>();public MyPagerAdapter(FragmentManager fm,List<ResponseDate.DataBean> list) {super(fm);//將一個集合中所有的數(shù)據(jù)加到當前的datasdates.addAll(list);for (ResponseDate.DataBean item:dates) {fragments.add(new Page1Fragment());}}@Nullable@Overridepublic CharSequence getPageTitle(int position) {//返回指定位置標題內容return dates.get(position).title;}@Overridepublic Fragment getItem(int i) {//返回頁面內容return fragments.get(i);}@Overridepublic int getCount() {//返回頁面數(shù)量return dates.size();}}MyPagerAdapter myPagerAdapter;TabLayout tabLayout;ViewPager viewPager;@Overrideprotected View getMyView() {//1.布局viewpager//2.加載View view = View.inflate(getActivity(),R.layout.fragment_home,null);viewPager = view.findViewById(R.id.vp_home);//3.定義適配器//4.初始化設置適配器//5.初始化指示器tabLayout = view.findViewById(R.id.tl_home);//向服務端獲取數(shù)據(jù)getDate();return view;}private void getDate() {//1.創(chuàng)建retrofit對象Retrofit retrofit = new Retrofit.Builder().baseUrl("http://192.168.31.114:8080/jrtt/")//會將地址和方法上的注解進行拼接.addConverterFactory(GsonConverterFactory.create(new Gson()))//添加一個轉換工廠,調用Gson對象,將json數(shù)據(jù)轉換為java對象.build();//執(zhí)行創(chuàng)建//2:重點是發(fā)請求獲取服務的數(shù)據(jù)MyApi myApi = retrofit.create(MyApi.class);//3:將json數(shù)據(jù)處理一下,使用插件gsonformat生成javaBeanmyApi.getType().enqueue(new Callback<ResponseDate>() {@Overridepublic void onResponse(Call<ResponseDate> call, Response<ResponseDate> response) {//處理獲取服務端數(shù)據(jù)成功ResponseDate responseDate = response.body();//定義適配器//初始化設置適配器myPagerAdapter = new MyPagerAdapter(getFragmentManager(),responseDate.data);viewPager.setAdapter(myPagerAdapter);//設置指示器tabLayout.setupWithViewPager(viewPager);}@Overridepublic void onFailure(Call<ResponseDate> call, Throwable t) {//處理獲取服務端數(shù)據(jù)失敗}});} }總結
以上是生活随笔為你收集整理的(仿头条APP项目)4.父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (仿头条APP项目)3.二级页面首页的V
- 下一篇: (仿头条APP项目)5.列表页面设计实现