日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(仿头条APP项目)4.父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据

發(fā)布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (仿头条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

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;public class BaseFragment extends Fragment {protected View view = null;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {//判斷view是否為空if(view==null) {view = getMyView();}else {//清除當前重用的view的parentViewGroup viewGroup = (ViewGroup) view.getParent();if (viewGroup!=null){viewGroup.removeView(view) ;}}return view;}protected View getMyView() {TextView textView= new TextView(getActivity());textView.setBackgroundColor(Color.GRAY);textView.setText("頁面");textView.setTextSize(30);textView.setGravity(Gravity.CENTER);return textView;} }

所有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類


import java.util.List;public class ResponseDate {/*** data : [{"id":10007,"title":"北京","type":1,"url":"10007/list_1.json"},{"id":10006,"title":"中國","type":1,"url":"10006/list_1.json"},{"id":10008,"title":"國際","type":1,"url":"10008/list_1.json"},{"id":10010,"title":"體育","type":1,"url":"10010/list_1.json"},{"id":10091,"title":"生活","type":1,"url":"10091/list_1.json"},{"id":10012,"title":"旅游","type":1,"url":"10012/list_1.json"},{"id":10095,"title":"科技","type":1,"url":"10095/list_1.json"},{"id":10009,"title":"軍事","type":1,"url":"10009/list_1.json"},{"id":10093,"title":"時尚","type":1,"url":"10093/list_1.json"},{"id":10011,"title":"財經(jīng)","type":1,"url":"10011/list_1.json"},{"id":10094,"title":"育兒","type":1,"url":"10094/list_1.json"},{"id":10105,"title":"汽車","type":1,"url":"10105/list_1.json"}]* retcode : 200*/public int retcode;public List<DataBean> data;public static class DataBean {/*** id : 10007* title : 北京* type : 1* url : 10007/list_1.json*/public int id;public String title;public int type;public String url;} }

在首頁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获取并解析服务器端数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。