public class Utils {
private static Utils instance;
private Utils(){

}
public static Utils getInstance(){
    if (instance==null){
        synchronized (Utils.class){
            if (instance==null){
                instance = new Utils();

            }
        }
    }
    return instance;
}
//Handler
public void getRequest4(final String apiUrl, final Class clazzBean, final NetCallback callback) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            final     = getRequest2(apiUrl, clazzBean);
            if (  != null) {
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        callback.onSuccess( );
                    }
                });
            } else {
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        callback.onFail(\"请求失败\");
                    }
                });
            }
        }
    }).start();
}
public void getRequest3(final String apiurl, final Class clazz, final UtilsCallback callback){
    new AsyncTask<String, Void,  >() {
        @Override
        protected   doInBackground(String... strings) {


            return getRequest2(strings[0], clazz);
        }

        @Override
        protected void onPostExecute(  o) {
            if (o==null){
                callback.onFail(\"请求失败\");
            }else {
                callback.onSuccess(o);

            }
        }
    }.execute(apiurl);
    //executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, apiUrl);
}
public interface UtilsCallback<T>{
    void onSuccess(T o);
    void onFail(String msg);

}
 /**
 * 执行一个网络请求
 *
 * @param apiUrl
 * @param clazzBean
 * @param <T>
 * @return 返回Bean类
 */  

public T getRequest2(String apiurl,Class clazz){
o;
String request = getRequest(apiurl);
Gson gson = new Gson();
o = gson.fromJson(request, clazz);
return (T)o;
}
/**
* 执行一个网络请求
*
* @param apiUrl
* @return 返回Strinng结果
*/
public String getRequest(String apiurl){
String steam = “”;
try {
URL url = new URL(apiurl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod(“GET”);
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if (responseCode==HttpURLConnection.HTTP_OK){
steam = getSteam(urlConnection.getInputStream());

        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return steam;
}

private String getSteam(InputStream inputStream) throws Exception {
    StringBuilder stringBuilder = new StringBuilder();
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    for (String tmp = bufferedReader.readLine();tmp != null;tmp = bufferedReader.readLine()){
        stringBuilder.append(tmp);
    }
    return stringBuilder.toString();
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
## Activity

public abstract class Activity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResId());
initData();
initView();
}
protected abstract int getLayoutResId();
protected abstract void initData();
protected abstract void initView();
}
1
2
3
4
5
6
7
8
9
10
11
12
## Fragment

public abstract class Fragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(getLayoutResId(),container,false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    initData();
    initView(view);
}
protected abstract int getLayoutResId();
protected abstract void initData();
protected abstract void initView(View view);

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
##App

public class App extends Application {

//Activity    Service    Receive   前回调
//在contentprovider 后调用
@Override
public void onCreate() {
    super.onCreate();
    //全局图片如何显示
    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .showImage ing(R.mipmap.ic_launcher)
            .showImageOnFail(R.mipmap.ic_launcher)
            .showImageForEmptyUri(R.mipmap.ic_launcher)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .build();

    ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
            .memoryCacheSizePercentage(20)
            .diskCache(new UnlimitedDiskCache(new File(getCacheDir(), \"images\")))
            .defaultDisplayImageOptions(options)
            .build();

    ImageLoader.getInstance().init(configuration);
}

//应用结束回调    真实设备上不会回调
@Override
public void onTerminate() {
    super.onTerminate();
}


//当内存过低的时候调用
@Override
public void onLowMemory() {
    //释放内存
    super.onLowMemory();
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
##tab+viewpager

public class FragmentTwo extends Fragment{

private ViewPager pager;
private TabLayout tab;

@Override
protected int getLayoutResId() {
    return R.layout.fragmenttwo;
}

@Override
protected void initData() {

}

@Override
protected void initView(View view) {
    pager = view.findViewById(R.id.pager);
    tab = view.findViewById(R.id.tab);
    pager.setAdapter(new Tabadapter(getChildFragmentManager()));
    tab.setupWithViewPager(pager);
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
##请求数据

public class FragmentFive extends Fragment{
private PullToRefreshListView pull;
private Myadapter myadapter;

@Override
protected int getLayoutResId() {
    return R.layout.fragmentfive;
}



@Override
protected void initView(View view) {
    pull = view.findViewById(R.id.pull);
    myadapter = new Myadapter(getActivity());
    pull.setAdapter(myadapter);
    pull.onRefreshComplete();
    pull.setOnRefreshListener(new PullToRefresh .OnRefreshListener2<ListView>() {
        @Override
        public void onPullDownToRefresh(PullToRefresh <ListView> refreshView) {
            page=1;
            initData();
        }

        @Override
        public void onPullUpToRefresh(PullToRefresh <ListView> refreshView) {
            initData();
        }
    });
}
private int page=1;
private final int count = 10;
private String relase=\"http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?\";
private String hot=\"http://172.17.8.100/movieApi/movie/v1/findHotMovieList?\";

@Override
protected void initData() {
    Utils.getInstance().getRequest3(hot+\"page=\"+page+\"&count=\"+count,NewHot.class, new Utils.UtilsCallback<NewHot>() {
        @Override
        public void onSuccess(NewHot o) {
            if (page==1){
                myadapter.setHot(o.getResult());
            }else {
                myadapter.addHot(o.getResult());
            }
            page++;
            pull.onRefreshComplete();

        }

        @Override
        public void onFail(String msg) {
            pull.onRefreshComplete();
            Toast.makeText(getActivity(),\"请求Hot错误\",Toast.LENGTH_SHORT).show();
        }
    });
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
##tab适配器

public class Tabadapter extends FragmentPagerAdapter {
private String[] s = new String[]{
“正在热映”,“即将热映”
};
public Tabadapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int i) {
    switch (i){
        case 0:
            return new FragmentOne();
        case 1:
         return new FragmentThree();
    }
    return null;
}

@Override
public int getCount() {
    return s.length;
}

@Nullable
@Override
public CharSequence getPage (int position) {
    return s[position];
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
##列表适配器

public class Myadapter extends Adapter {
private Context context;
private List<NewHot.HotBean> hot;

public Myadapter(Context context) {
    this.context = context;
    this.hot = new ArrayList<>();
   
}

public void setHot(List<NewHot.HotBean> hot) {
    if (hot!=null){
        this.hot = hot;
    }
    notifyDataSetChanged();
}
public void addHot(List<NewHot.HotBean> hot){
    if (hot!=null){
        this.hot.addAll(hot);
    }
    notifyDataSetChanged();
}


@Override
public int getCount() {
    return hot.size();
}

@Override
public   getItem(int position) {
    return hot.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    HotViewHolder hotViewHolder;
    if (convertView==null){
        convertView = LayoutInflater.from(context).inflate(R.layout.hot_item,parent,false);
        hotViewHolder = new HotViewHolder(convertView);
    }else {
        hotViewHolder = (HotViewHolder) convertView.getTag();
    }
    hotViewHolder.bindHot((NewHot.HotBean) getItem(position));
    return convertView;
}
class HotViewHolder{
    TextView hname,hdata;
    ImageView hiv_img;

    public HotViewHolder(View convertView) {
        hname = convertView.findViewById(R.id.hname);
        hdata = convertView.findViewById(R.id.hdata);
        hiv_img = convertView.findViewById(R.id.hiv_img);
        convertView.setTag(this);
    }

    public void bindHot(NewHot.HotBean item) {
        hname.setText(item.getName());
        hdata.setText(item.getSummary());
        ImageLoader.getInstance().displayImage(item.getImageUrl(),hiv_img);
    }
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
##viewpager 和 列表 适配器

public class Infoadapter extends Adapter {
private Context context;
private List<BannerBean.Data> banner;
private List<NewsBean.ResultBean> news;

public Infoadapter(Context context) {
    this.context = context;
    banner = new ArrayList<>();
    news = new ArrayList<>();
}

public void setBanner(List<BannerBean.Data> banner) {
    if (banner!=null) {
        this.banner = banner;
        notifyDataSetChanged();
    }
}
public void setNews(List<NewsBean.ResultBean> news) {
    if (news!=null) {
        this.news = news;

    }notifyDataSetChanged();
}
public void addNews(List<NewsBean.ResultBean> news){
    if (news!=null) {
        this.news.addAll(news);

    }
    notifyDataSetChanged();
}
@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {
    if (banner.size()>0&&position==0){
        return 0;
    }
    return 1;
}

@Override
public int getCount() {
    return banner.size()>0?news.size()+1:news.size();
}


@Override
public NewsBean.ResultBean getItem(int position) {
   if (banner.size()>0){
        if (position==0){
            return null;
        }

return news.get(position-1);
}
return news.get(position);
}

@Override
public long getItemId(int position) {

    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (getItemViewType(position)==0){
        bannerViewHolder bannerviewHolder;
        if (convertView==null){
            convertView = LayoutInflater.from(context).inflate(R.layout.banner_item,parent,false);
            bannerviewHolder = new bannerViewHolder(convertView);
        }else {
            bannerviewHolder = (bannerViewHolder) convertView.getTag();
        }

        bannerviewHolder.bindBanner(banner);
    }else {
    newsViewHolder newsviewHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
        newsviewHolder = new newsViewHolder(convertView);
    } else {
        newsviewHolder = (newsViewHolder) convertView.getTag();
    }
    newsviewHolder.bindnews(getItem(position));

}
return convertView;
}
class bannerViewHolder{
private Mybanneradapter mybanneradapter;
ViewPager bannerpager;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
int i =0;
if (msg.what==1){
i = bannerpager.getCurrentItem();
i++;
bannerpager.setCurrentItem(i);
handler.sendEmptyMessageDelayed(1,3000);
}
}
};

    public bannerViewHolder(View convertView) {
        bannerpager = convertView.findViewById(R.id.bannerpager);
        mybanneradapter = new Mybanneradapter();
        bannerpager.setAdapter(mybanneradapter);
        convertView.setTag(this);
    }

    public void bindBanner(List<BannerBean.Data> item) {
        mybanneradapter.setList(item);
        handler.removeMessages(1);
        if (item.size()>1){

            bannerpager.setCurrentItem(item.size()*5000);

            handler.sendEmptyMessageDelayed(1,3000);
        }

    }
}
class newsViewHolder{
    TextView name,summary;
    ImageView icon;

    public newsViewHolder(View convertView) {
        name = convertView.findViewById(R.id.name);
        summary = convertView.findViewById(R.id.summary);
        icon = convertView.findViewById(R.id.icon);
        convertView.setTag(this);
    }

    public void bindnews(NewsBean.ResultBean item) {
        name.setText(item.getName());
        summary.setText(item.getSummary());
        ImageLoader.getInstance().displayImage(item.getImageUrl(),icon);
    }
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
##请求数据 轮播和列表

public class InfoFragment extends Fragment{
private Infoadapter infoadapter;

private PullToRefreshListView pull;

@Override
protected void initView(View view) {

     pull = view.findViewById(R.id.pull);
     pull.setMode(PullToRefreshListView.Mode.BOTH);
    infoadapter = new Infoadapter(getActivity());
    pull.setAdapter(infoadapter);

    pull.setOnRefreshListener(new PullToRefresh .OnRefreshListener2<ListView>() {
         @Override
         public void onPullDownToRefresh(PullToRefresh <ListView> refreshView) {
             //刷新
             page=1;
             initData();
         }

         @Override
         public void onPullUpToRefresh(PullToRefresh <ListView> refreshView) {
            //加载
            requestNews();
         }
     });

}
private int page =1;
private final int count = 10;
private String bannerUrl = \"http://www.zhaoapi.cn/quarter/getAd\";
//page=1&count=10
private String newsUrl = \"http://172.17.8.100/movieApi/movie/v1/findHotMovieList?\";
@Override
protected void initData() {
    requestBanner();
    requestNews();
}

private void requestNews() {
    Utils.getInstance().getRequest3(newsUrl + \"page=\" + page + \"&count=\" + count,
            NewsBean.class, new Utils.NetCallback<NewsBean>() {
        @Override
        public void onSuccess(NewsBean o) {

            if (page==1){
                infoadapter.setNews(o.getResult());
            }else {
                infoadapter.addNews(o.getResult());
            }
            page++;
            pull.onRefreshComplete();
            if (o.getResult().size()<count){
                pull.setMode(PullToRefresh .Mode.PULL_FROM_START);
            }else {
                pull.setMode(PullToRefresh .Mode.BOTH);
            }
        }

        @Override
        public void onFail(String msg) {
            pull.onRefreshComplete();
            Toast.makeText(getActivity(), \"请求News错误\", Toast.LENGTH_SHORT).show();
        }
    });
}

private void requestBanner() {
    Utils.getInstance().getRequest3(bannerUrl, BannerBean.class, new Utils.NetCallback<BannerBean>() {
        @Override
        public void onSuccess(BannerBean o) {
            infoadapter.setBanner(o.getData());
        }

        @Override
        public void onFail(String msg) {
            Toast.makeText(getActivity(), \"请求Banner错误\", Toast.LENGTH_SHORT).show();
        }
    });
}

@Override
protected int getLayoutResId() {
    return R.layout.infofragment;
}

}

收藏 打印